zoukankan      html  css  js  c++  java
  • 天空盒和相机

    .h文件:
    #ifndef __HELLOWORLD_SCENE_H__
    #define __HELLOWORLD_SCENE_H__
    
    #include "cocos2d.h"
    
    class HelloWorld : public cocos2d::Layer
    {
    public:
        static cocos2d::Scene* createScene();
    	cocos2d::Skybox*   _skyBox;
    	cocos2d::Camera *_camera;
    	//Node* _worldScene;
        virtual bool init();
        
        // a selector callback
        void menuCloseCallback(cocos2d::Ref* pSender);
    
    	cocos2d::TextureCube*   _textureCube;
    	
        // implement the "static create()" method manually
        CREATE_FUNC(HelloWorld);
    };
    
    #endif // __HELLOWORLD_SCENE_H__
    

    .cpp文件:

    #include "HelloWorldScene.h"
    
    USING_NS_CC;
    
    Scene* HelloWorld::createScene()
    {
        // 'scene' is an autorelease object
        auto scene = Scene::create();
        
        // 'layer' is an autorelease object
        auto layer = HelloWorld::create();
    
        // add layer as a child to scene
        scene->addChild(layer);
    
        // return the scene
        return scene;
    }
    
    
    
    
    // on "init" you need to initialize your instance
    bool HelloWorld::init()
    {
        //////////////////////////////
        // 1. super init first
        if ( !Layer::init() )
        {
            return false;
        }
    
    	// create skybox
    	//create and set our custom shader
    	auto shader = GLProgram::createWithFilenames("Sprite3DTest/cube_map.vert",
    		"Sprite3DTest/cube_map.frag");
    	auto state = GLProgramState::create(shader);
    
    	// create the second texture for cylinder
    	_textureCube = TextureCube::create("Sprite3DTest/skybox/left.jpg",
    		"Sprite3DTest/skybox/right.jpg",
    		"Sprite3DTest/skybox/top.jpg",
    		"Sprite3DTest/skybox/bottom.jpg",
    		"Sprite3DTest/skybox/front.jpg",
    		"Sprite3DTest/skybox/back.jpg");
    	//set texture parameters
    	Texture2D::TexParams tRepeatParams;
    	tRepeatParams.magFilter = GL_LINEAR;
    	tRepeatParams.minFilter = GL_LINEAR;
    	tRepeatParams.wrapS = GL_MIRRORED_REPEAT;
    	tRepeatParams.wrapT = GL_MIRRORED_REPEAT;
    	_textureCube->setTexParameters(tRepeatParams);
    
    	// pass the texture sampler to our custom shader
    	state->setUniformTexture("u_cubeTex", _textureCube);
    
    	// add skybox
    	_skyBox = Skybox::create();
    	_skyBox->setTexture(_textureCube);
    	_skyBox->setScale(700.f);//700.f
    	this->addChild(_skyBox);
    	_skyBox->setCameraMask((unsigned short)CameraFlag::USER1);
    	//_skyBox->setPosition3D(Vec3(0, -15, -50));
    	//_skyBox->setRotation3D(Vec3(-90, 0, 0));
    
    	Size size = Director::getInstance()->getWinSize();
    	_camera = Camera::createPerspective(30.0f, size.width / size.height, 1.0f, 1000.0f);
    	_camera->setPosition3D(Vec3(size.width / 2, size.height / 2, 100.0f));
    	_camera->lookAt(Vec3(-10000.0f, 6000.0f, 0.0f), Vec3(0.0f, 1.0f,0.0f));
    	_camera->setCameraFlag(CameraFlag::USER1);
    	this->addChild(_camera);
    
        Size visibleSize = Director::getInstance()->getVisibleSize();
        Vec2 origin = Director::getInstance()->getVisibleOrigin();
    
        /////////////////////////////
        // 2. add a menu item with "X" image, which is clicked to quit the program
        //    you may modify it.
    
        // add a "close" icon to exit the progress. it's an autorelease object
        auto closeItem = MenuItemImage::create(
                                               "CloseNormal.png",
                                               "CloseSelected.png",
                                               CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
        
    	closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                    origin.y + closeItem->getContentSize().height/2));
    
        // create menu, it's an autorelease object
        auto menu = Menu::create(closeItem, NULL);
        menu->setPosition(Vec2::ZERO);
        this->addChild(menu, 1);
    
    	/////
    
    
    
    	//addChild(_skyBox);
        /////////////////////////////
        // 3. add your codes below...
    
        // add a label shows "Hello World"
        // create and initialize a label
        
        auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24);
        
        // position the label on the center of the screen
        label->setPosition(Vec2(origin.x + visibleSize.width/2,
                                origin.y + visibleSize.height - label->getContentSize().height));
    
        // add the label as a child to this layer
        this->addChild(label, 1);
    
        // add "HelloWorld" splash screen"
       // auto sprite = Sprite::create("HelloWorld.png");
    
        // position the sprite on the center of the screen
      //  sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
    
        // add the sprite as a child to this layer
       // this->addChild(sprite, 0);
        
        return true;
    }
    
    
    void HelloWorld::menuCloseCallback(Ref* pSender)
    {
        Director::getInstance()->end();
    	//Application::getInstance()->openURL("http://blog.csdn.net/anzhongliu?viewmode=contents");
    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
        exit(0);
    #endif
    }
    

    效果:


  • 相关阅读:
    windows 按时自动化任务
    Linux libusb 安装及简单使用
    Linux 交换eth0和eth1
    I.MX6 GPS JNI HAL register init hacking
    I.MX6 Android mmm convenient to use
    I.MX6 GPS Android HAL Framework 调试
    Android GPS GPSBasics project hacking
    Python windows serial
    【JAVA】别特注意,POI中getLastRowNum() 和getLastCellNum()的区别
    freemarker跳出循环
  • 原文地址:https://www.cnblogs.com/Anzhongliu/p/6091897.html
Copyright © 2011-2022 走看看