mirror of https://github.com/axmolengine/axmol.git
light work
This commit is contained in:
parent
e849b997ed
commit
df9ab144fe
|
@ -2772,6 +2772,9 @@
|
|||
B3AF019F1842FBA400A98B85 /* b2MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MotorJoint.h; sourceTree = "<group>"; };
|
||||
B609E64C19C136F9003D0074 /* CCLight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCLight.cpp; sourceTree = "<group>"; };
|
||||
B609E64D19C136F9003D0074 /* CCLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCLight.h; sourceTree = "<group>"; };
|
||||
B609E65C19C17FF0003D0074 /* ccShader_3D_ColorNormal.frag */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_3D_ColorNormal.frag; sourceTree = "<group>"; };
|
||||
B609E65D19C17FF0003D0074 /* ccShader_3D_ColorNormalTex.frag */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_3D_ColorNormalTex.frag; sourceTree = "<group>"; };
|
||||
B609E65E19C17FF0003D0074 /* ccShader_3D_PositionNormalTex.vert */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_3D_PositionNormalTex.vert; sourceTree = "<group>"; };
|
||||
ED9C6A9218599AD8000A5232 /* CCNodeGrid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = CCNodeGrid.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
|
||||
ED9C6A9318599AD8000A5232 /* CCNodeGrid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCNodeGrid.h; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
@ -4446,6 +4449,9 @@
|
|||
5034CA5D191D591900CE6051 /* shaders */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B609E65C19C17FF0003D0074 /* ccShader_3D_ColorNormal.frag */,
|
||||
B609E65D19C17FF0003D0074 /* ccShader_3D_ColorNormalTex.frag */,
|
||||
B609E65E19C17FF0003D0074 /* ccShader_3D_PositionNormalTex.vert */,
|
||||
B29594AF1926D5D9003EEF37 /* ccShader_3D_Color.frag */,
|
||||
B29594B01926D5D9003EEF37 /* ccShader_3D_ColorTex.frag */,
|
||||
B29594B11926D5D9003EEF37 /* ccShader_3D_PositionTex.vert */,
|
||||
|
|
|
@ -18,7 +18,7 @@ Light3D::~Light3D()
|
|||
Light3D* Light3D::createDirectionalLight( const Vec3 &direction, const Color3B &color )
|
||||
{
|
||||
Light3D *light = new Light3D;
|
||||
light->_lightType = DIRECTIONAL;
|
||||
light->_lightType = Light3D::LightType::DIRECTIONAL;
|
||||
light->calculateRotation(direction);
|
||||
light->setColor(color);
|
||||
light->autorelease();
|
||||
|
@ -28,7 +28,7 @@ Light3D* Light3D::createDirectionalLight( const Vec3 &direction, const Color3B &
|
|||
Light3D* Light3D::createPointLight( const Vec3 &position, const Color3B &color, float range )
|
||||
{
|
||||
Light3D *light = new Light3D;
|
||||
light->_lightType = POINT;
|
||||
light->_lightType = Light3D::LightType::POINT;
|
||||
light->setPosition3D(position);
|
||||
light->setColor(color);
|
||||
light->_range = range;
|
||||
|
@ -39,7 +39,7 @@ Light3D* Light3D::createPointLight( const Vec3 &position, const Color3B &color,
|
|||
Light3D* Light3D::createSpotLight( const Vec3 &direction, const Vec3 &position, const Color3B &color, float innerAngle, float outerAngle, float range )
|
||||
{
|
||||
Light3D *light = new Light3D;
|
||||
light->_lightType = SPOT;
|
||||
light->_lightType = Light3D::LightType::SPOT;
|
||||
light->calculateRotation(direction);
|
||||
light->setPosition3D(position);
|
||||
light->setColor(color);
|
||||
|
|
|
@ -26,14 +26,15 @@
|
|||
#define __CCLIGHT_H__
|
||||
|
||||
#include "2d/CCNode.h"
|
||||
#include "3d/3dExport.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
class CC_DLL Light3D : public Node
|
||||
class CC_3D_DLL Light3D : public Node
|
||||
{
|
||||
public:
|
||||
|
||||
enum LightType
|
||||
enum class LightType
|
||||
{
|
||||
DIRECTIONAL = 0,
|
||||
POINT = 1,
|
||||
|
|
|
@ -989,7 +989,7 @@ void GLProgram::setUniformsForBuiltins(const Mat4 &matrixMV)
|
|||
{
|
||||
col = Color3B::BLACK;
|
||||
}
|
||||
if (light->getLightType() == Light3D::DIRECTIONAL)
|
||||
if (light->getLightType() == Light3D::LightType::DIRECTIONAL)
|
||||
{
|
||||
CCASSERT(enabledDirLightNum < CC_MAX_DIRECTIONAL_LIGHT_NUM, "");
|
||||
Vec3 dir = light->getWorldDirection();
|
||||
|
@ -1000,39 +1000,38 @@ void GLProgram::setUniformsForBuiltins(const Mat4 &matrixMV)
|
|||
setUniformLocationWith3f(glGetUniformLocation(_program, str), dir.x, dir.y, dir.z);
|
||||
++enabledDirLightNum;
|
||||
}
|
||||
else if (light->getLightType() == Light3D::LightType::POINT)
|
||||
{
|
||||
CCASSERT(enabledPointLightNum < CC_MAX_POINT_LIGHT_NUM, "");
|
||||
Mat4 mat= light->getNodeToWorldTransform();
|
||||
sprintf(str, "CC_PointLightSourceColor[%d]", enabledPointLightNum);
|
||||
setUniformLocationWith3f(glGetUniformLocation(_program, str), col.r / 255.0f, col.g / 255.0f, col.b / 255.0f);
|
||||
sprintf(str, "CC_PointLightSourcePosition[%d]", enabledPointLightNum);
|
||||
setUniformLocationWith3f(glGetUniformLocation(_program, str), mat.m[12], mat.m[13], mat.m[14]);
|
||||
sprintf(str, "CC_PointLightSourceRangeInverse[%d]", enabledPointLightNum);
|
||||
setUniformLocationWith1f(glGetUniformLocation(_program, str), 1.0f / light->getRange());
|
||||
++enabledPointLightNum;
|
||||
}
|
||||
else
|
||||
if (light->getLightType() == Light3D::POINT)
|
||||
{
|
||||
CCASSERT(enabledPointLightNum < CC_MAX_POINT_LIGHT_NUM, "");
|
||||
Mat4 mat= light->getNodeToWorldTransform();
|
||||
sprintf(str, "CC_PointLightSourceColor[%d]", enabledPointLightNum);
|
||||
setUniformLocationWith3f(glGetUniformLocation(_program, str), col.r / 255.0f, col.g / 255.0f, col.b / 255.0f);
|
||||
sprintf(str, "CC_PointLightSourcePosition[%d]", enabledPointLightNum);
|
||||
setUniformLocationWith3f(glGetUniformLocation(_program, str), mat.m[12], mat.m[13], mat.m[14]);
|
||||
sprintf(str, "CC_PointLightSourceRangeInverse[%d]", enabledPointLightNum);
|
||||
setUniformLocationWith1f(glGetUniformLocation(_program, str), 1.0f / light->getRange());
|
||||
++enabledPointLightNum;
|
||||
}
|
||||
else
|
||||
{
|
||||
CCASSERT(enabledSpotLightNum < CC_MAX_SPOT_LIGHT_NUM, "");
|
||||
Vec3 dir = light->getWorldDirection();
|
||||
dir.normalize();
|
||||
Mat4 mat= light->getNodeToWorldTransform();
|
||||
sprintf(str, "CC_SpotLightSourceColor[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith3f(glGetUniformLocation(_program, str), col.r / 255.0f, col.g / 255.0f, col.b / 255.0f);
|
||||
sprintf(str, "CC_SpotLightSourcePosition[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith3f(glGetUniformLocation(_program, str), mat.m[12], mat.m[13], mat.m[14]);
|
||||
sprintf(str, "CC_SpotLightSourceDirection[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith3f(glGetUniformLocation(_program, str), dir.x, dir.y, dir.z);
|
||||
sprintf(str, "CC_SpotLightSourceInnerAngleCos[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith1f(glGetUniformLocation(_program, str), cosf(light->getInnerAngle()));
|
||||
sprintf(str, "CC_SpotLightSourceOuterAngleCos[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith1f(glGetUniformLocation(_program, str), cosf(light->getOuterAngle()));
|
||||
sprintf(str, "CC_SpotLightSourceRangeInverse[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith1f(glGetUniformLocation(_program, str), 1.0f / light->getRange());
|
||||
++enabledSpotLightNum;
|
||||
}
|
||||
{
|
||||
CCASSERT(enabledSpotLightNum < CC_MAX_SPOT_LIGHT_NUM, "");
|
||||
Vec3 dir = light->getWorldDirection();
|
||||
dir.normalize();
|
||||
Mat4 mat= light->getNodeToWorldTransform();
|
||||
sprintf(str, "CC_SpotLightSourceColor[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith3f(glGetUniformLocation(_program, str), col.r / 255.0f, col.g / 255.0f, col.b / 255.0f);
|
||||
sprintf(str, "CC_SpotLightSourcePosition[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith3f(glGetUniformLocation(_program, str), mat.m[12], mat.m[13], mat.m[14]);
|
||||
sprintf(str, "CC_SpotLightSourceDirection[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith3f(glGetUniformLocation(_program, str), dir.x, dir.y, dir.z);
|
||||
sprintf(str, "CC_SpotLightSourceInnerAngleCos[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith1f(glGetUniformLocation(_program, str), cosf(light->getInnerAngle()));
|
||||
sprintf(str, "CC_SpotLightSourceOuterAngleCos[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith1f(glGetUniformLocation(_program, str), cosf(light->getOuterAngle()));
|
||||
sprintf(str, "CC_SpotLightSourceRangeInverse[%d]", enabledSpotLightNum);
|
||||
setUniformLocationWith1f(glGetUniformLocation(_program, str), 1.0f / light->getRange());
|
||||
++enabledSpotLightNum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -58,13 +58,13 @@ LightTestDemo::LightTestDemo()
|
|||
TTFConfig ttfConfig("fonts/arial.ttf", 15);
|
||||
_directionalLightLabel = Label::createWithTTF(ttfConfig,"Directional Light ON");
|
||||
_directionalLightLabel->retain();
|
||||
auto menuItem1 = MenuItemLabel::create(_directionalLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::DIRECTIONAL));
|
||||
auto menuItem1 = MenuItemLabel::create(_directionalLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::LightType::DIRECTIONAL));
|
||||
_pointLightLabel = Label::createWithTTF(ttfConfig,"Point Light OFF");
|
||||
_pointLightLabel->retain();
|
||||
auto menuItem2 = MenuItemLabel::create(_pointLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::POINT));
|
||||
auto menuItem2 = MenuItemLabel::create(_pointLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::LightType::POINT));
|
||||
_spotLightLabel = Label::createWithTTF(ttfConfig,"Spot Light OFF");
|
||||
_spotLightLabel->retain();
|
||||
auto menuItem3 = MenuItemLabel::create(_spotLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::SPOT));
|
||||
auto menuItem3 = MenuItemLabel::create(_spotLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::LightType::SPOT));
|
||||
auto menu = Menu::create(menuItem1,menuItem2,menuItem3,NULL);
|
||||
menu->setPosition(Vec2::ZERO);
|
||||
menuItem1->setAnchorPoint(Vec2::ANCHOR_TOP_LEFT);
|
||||
|
@ -205,18 +205,18 @@ void LightTestDemo::addSprite()
|
|||
void LightTestDemo::addLights()
|
||||
{
|
||||
auto s = Director::getInstance()->getWinSize();
|
||||
_directionalLight = Light3D::CreateDirectionalLight(Vec3(-1.0f, -1.0f, 0.0f), Color3B(200, 200, 200));
|
||||
_directionalLight = Light3D::createDirectionalLight(Vec3(-1.0f, -1.0f, 0.0f), Color3B(200, 200, 200));
|
||||
_directionalLight->retain();
|
||||
addChild(_directionalLight);
|
||||
_directionalLight->setCameraMask(2);
|
||||
|
||||
_pointLight = Light3D::CreatePointLight(Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 10000.0f);
|
||||
_pointLight = Light3D::createPointLight(Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 10000.0f);
|
||||
_pointLight->retain();
|
||||
_pointLight->setEnabled(false);
|
||||
addChild(_pointLight);
|
||||
_pointLight->setCameraMask(2);
|
||||
|
||||
_spotLight = Light3D::CreateSpotLight(Vec3(-1.0f, -1.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 0.0, 0.5, 10000.0f);
|
||||
_spotLight = Light3D::createSpotLight(Vec3(-1.0f, -1.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 0.0, 0.5, 10000.0f);
|
||||
_spotLight->retain();
|
||||
_spotLight->setEnabled(false);
|
||||
addChild(_spotLight);
|
||||
|
@ -280,7 +280,7 @@ void LightTestDemo::SwitchLight( Ref* sender,Light3D::LightType lightType )
|
|||
{
|
||||
switch (lightType)
|
||||
{
|
||||
case Light3D::DIRECTIONAL:
|
||||
case Light3D::LightType::DIRECTIONAL:
|
||||
{
|
||||
char str[32];
|
||||
bool isON = !_directionalLight->getEnabled();
|
||||
|
@ -290,7 +290,7 @@ void LightTestDemo::SwitchLight( Ref* sender,Light3D::LightType lightType )
|
|||
}
|
||||
break;
|
||||
|
||||
case Light3D::POINT:
|
||||
case Light3D::LightType::POINT:
|
||||
{
|
||||
char str[32];
|
||||
bool isON = !_pointLight->getEnabled();
|
||||
|
@ -300,7 +300,7 @@ void LightTestDemo::SwitchLight( Ref* sender,Light3D::LightType lightType )
|
|||
}
|
||||
break;
|
||||
|
||||
case Light3D::SPOT:
|
||||
case Light3D::LightType::SPOT:
|
||||
{
|
||||
char str[32];
|
||||
bool isON = !_spotLight->getEnabled();
|
||||
|
|
|
@ -552,7 +552,7 @@ void Effect3DOutline::draw(const Mat4 &transform)
|
|||
_glProgramState->apply(transform);
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh->getIndexBuffer());
|
||||
glDrawElements(mesh->getPrimitiveType(), mesh->getIndexCount(), mesh->getIndexFormat(), 0);
|
||||
glDrawElements(mesh->getPrimitiveType(), (GLsizei)mesh->getIndexCount(), mesh->getIndexFormat(), 0);
|
||||
CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, mesh->getIndexCount());
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
|
Loading…
Reference in New Issue