Skip to content

Commit 5700426

Browse files
author
Alfonse
committed
Tut18: Scene and lighting improvements.
1 parent 612f68a commit 5700426

File tree

3 files changed

+31
-8
lines changed

3 files changed

+31
-8
lines changed

Tut 18 Bumpy Textures/Bumpy Square.cpp

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ void LoadTextures()
9090
*/
9191
glutil::ObjectData g_objectData =
9292
{
93-
glm::vec3(0.0f, 1.0f, 0.0f),
93+
glm::vec3(0.0f, 1.0f, 2.0f),
9494
glm::fquat(1.0f, 0.0f, 0.0f, 0.0f),
9595
};
9696

@@ -136,6 +136,7 @@ GLint g_unlitModelToCameraMatrixUnif;
136136
GLint g_unlitObjectColorUnif;
137137
GLuint g_unlitProg;
138138
Framework::Mesh *g_pSphereMesh = NULL;
139+
Framework::NodeRef g_bumpMapNode;
139140

140141

141142

@@ -147,6 +148,8 @@ void LoadAndSetupScene()
147148

148149
AssociateUniformWithNodes(nodes, g_lightNumBinder, "numberOfLights");
149150
SetStateBinderWithNodes(nodes, g_lightNumBinder);
151+
152+
Framework::NodeRef bumpMapNode = pScene->FindNode("object");
150153

151154
GLuint unlit = pScene->FindProgram("p_unlit");
152155
Framework::Mesh *pSphereMesh = pScene->FindMesh("m_sphere");
@@ -162,6 +165,7 @@ void LoadAndSetupScene()
162165
g_unlitProg = unlit;
163166
g_unlitModelToCameraMatrixUnif = glGetUniformLocation(unlit, "modelToCameraMatrix");
164167
g_unlitObjectColorUnif = glGetUniformLocation(unlit, "objectColor");
168+
g_bumpMapNode = bumpMapNode;
165169

166170
std::swap(nodes, g_nodes);
167171
nodes.clear(); //If something was there already, delete it.
@@ -257,11 +261,18 @@ using Framework::Timer;
257261

258262
bool g_bDrawCameraPos = false;
259263
bool g_bDrawLightPos = true;
264+
bool g_bLongLightRange = false;
260265

261266
int g_displayWidth = 500;
262267
int g_displayHeight = 500;
263268

264-
const glm::vec4 g_lightPosOffset = glm::vec4(1.0f, 0.0f, 0.0f, 1.0f);
269+
inline glm::vec4 GetLightOffset()
270+
{
271+
const glm::vec4 g_lightOffsetShort = glm::vec4(-2.0f, 0.0f, 0.0f, 1.0f);
272+
const glm::vec4 g_lightOffsetLong = glm::vec4(-4.0f, 0.0f, 0.0f, 1.0f);
273+
274+
return g_bLongLightRange ? g_lightOffsetLong : g_lightOffsetShort;
275+
}
265276

266277
void BuildLights( const glm::mat4 &camMatrix )
267278
{
@@ -278,7 +289,7 @@ void BuildLights( const glm::mat4 &camMatrix )
278289
if(g_pObjPole)
279290
{
280291
lightData.lights[1].cameraSpaceLightPos = camMatrix * g_pObjPole->CalcMatrix() *
281-
g_lightPosOffset;
292+
GetLightOffset();
282293
}
283294
else
284295
{
@@ -327,8 +338,12 @@ void display()
327338
}
328339

329340
{
330-
glm::mat4 temp(1.0f);
331-
g_nodes[0].SetNodePreTransform(glm::rotate(temp, 20.0f, glm::vec3(0.0f, 1.0f, 0.0f)));
341+
glm::mat4 temp(
342+
glm::vec4(1.0f, 0.0f, 0.0f, 0.0f),
343+
glm::vec4(1.0f, 1.0f, 0.0f, 0.0f),
344+
glm::vec4(0.0f, 0.0f, 1.0f, 0.0f),
345+
glm::vec4(0.0f, 0.0f, 0.0f, 1.0f));
346+
g_bumpMapNode.SetNodePreTransform(temp);
332347
}
333348

334349
g_pScene->Render(modelMatrix.Top());
@@ -337,8 +352,8 @@ void display()
337352
{
338353
glutil::PushStack stackPush(modelMatrix);
339354
modelMatrix.ApplyMatrix(g_pObjPole->CalcMatrix());
340-
modelMatrix.Translate(glm::vec3(g_lightPosOffset.x, g_lightPosOffset.y, g_lightPosOffset.z));
341-
modelMatrix.Scale(0.0625f);
355+
modelMatrix.Translate(glm::vec3(GetLightOffset()));
356+
modelMatrix.Scale(0.125f);
342357

343358
glUseProgram(g_unlitProg);
344359
glUniformMatrix4fv(g_unlitModelToCameraMatrixUnif, 1, GL_FALSE,
@@ -410,6 +425,9 @@ void keyboard(unsigned char key, int x, int y)
410425
case 'g':
411426
g_bDrawLightPos = !g_bDrawLightPos;
412427
break;
428+
case 'i':
429+
g_bLongLightRange = !g_bLongLightRange;
430+
break;
413431
case 'p':
414432
g_timer.TogglePause();
415433
break;

framework/Scene.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,6 +1126,10 @@ namespace Framework
11261126
}
11271127
};
11281128

1129+
NodeRef::NodeRef()
1130+
: m_pNode(NULL)
1131+
{}
1132+
11291133
void NodeRef::NodeSetScale( const glm::vec3 &scale )
11301134
{
11311135
m_pNode->NodeSetScale(scale);

framework/Scene.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ namespace Framework
2020
class NodeRef
2121
{
2222
public:
23+
NodeRef();
24+
2325
void NodeSetScale(const glm::vec3 &scale);
2426
void NodeSetScale(float scale);
2527

@@ -48,7 +50,6 @@ namespace Framework
4850
GLuint GetProgram(const std::string &variation) const;
4951

5052
private:
51-
NodeRef(); //No default-construction.
5253
explicit NodeRef(SceneNode *pNode) : m_pNode(pNode) {}
5354
SceneNode *m_pNode;
5455

0 commit comments

Comments
 (0)