rotate those boxes
This commit is contained in:
parent
5926b21cd4
commit
976f5eeafc
|
@ -52,7 +52,7 @@ rotateZ 0.0
|
|||
obj 1
|
||||
use 0
|
||||
name myCrate2
|
||||
translate 0.0 1.0 0.0
|
||||
translate 0.0 3.0 0.0
|
||||
scale 0.5 0.5 0.5
|
||||
# Definition des Parent Objekts
|
||||
parent 0
|
||||
|
|
10
src/main.c
10
src/main.c
|
@ -212,7 +212,7 @@ void init(void) {
|
|||
setNodeRenderFunction(&renderNode);
|
||||
|
||||
// read scene graph
|
||||
rootNode = loadSceneGraphFromFile("../scene-graph-example.scg");
|
||||
rootNode = loadSceneGraphFromFile("../test-scene-graph.scg");
|
||||
|
||||
// ENABLE BACKFACE CULLING
|
||||
glFrontFace(GL_CCW);
|
||||
|
@ -241,12 +241,14 @@ void draw(void) {
|
|||
timeSinceUpdate += deltaTime;
|
||||
glfwSetTime(0.0f);
|
||||
|
||||
|
||||
if (timeSinceUpdate >= timeBetweenUpdates) {
|
||||
updateStats();
|
||||
timeSinceUpdate = 0.0f;
|
||||
framesSinceUpdate = 0;
|
||||
}
|
||||
|
||||
|
||||
// camera movement
|
||||
handleInputs(deltaTime);
|
||||
|
||||
|
@ -259,6 +261,10 @@ void draw(void) {
|
|||
if (step > 1.0f) step -= 1.0f;
|
||||
if (step < 0.0f) step += 1.0f;
|
||||
|
||||
SceneNode* box3 = findNodeByName("box3", rootNode);
|
||||
rotateY(&box3->transformation, &box3->transformation, 0.001);
|
||||
updateSceneNode(rootNode, NULL);
|
||||
|
||||
// step multiplied by pi * 2 for use in rotation and trig functions
|
||||
GLfloat stepi = step * pi * 2;
|
||||
|
||||
|
@ -291,7 +297,7 @@ void draw(void) {
|
|||
glUniform4f(glGetUniformLocation(program, "ambientLight"), 0.05f, 0.05f, 0.05f, 1.0f);
|
||||
|
||||
vec4 lightPosition = {cos(stepi) * 5.0f, 5.0f, sin(stepi) * 5.0f, 1.0f};
|
||||
multiplyAny(&lightPosition, &viewingTransformation, &lightPosition, 4, 4, 1);
|
||||
multiplyAny((GLfloat*)&lightPosition, (GLfloat*)&viewingTransformation, (GLfloat*)&lightPosition, 4, 4, 1);
|
||||
|
||||
glUniform3f(glGetUniformLocation(program, "lightPosition"), lightPosition.x, lightPosition.y, lightPosition.z);
|
||||
|
||||
|
|
|
@ -55,7 +55,9 @@ void addChild(SceneNode* parent, SceneNode* child) {
|
|||
}
|
||||
|
||||
void updateSceneNode(SceneNode* node, mat4* parentTransformation) {
|
||||
multiply(&node->worldTransformation, parentTransformation, &node->transformation);
|
||||
if (parentTransformation) {
|
||||
multiply(&node->worldTransformation, parentTransformation, &node->transformation);
|
||||
}
|
||||
for (int i = 0; i < node->numChildren; i++) {
|
||||
updateSceneNode(node->children[i], &node->worldTransformation);
|
||||
}
|
||||
|
@ -116,6 +118,15 @@ SceneNode* findNode(int id, SceneNode* root) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
SceneNode* findNodeByName(char* name, SceneNode* root) {
|
||||
if (root->name && strcmp(root->name, name) == 0) return root;
|
||||
for (int i = 0; i < root->numChildren; i++) {
|
||||
SceneNode* node = findNodeByName(name, root->children[i]);
|
||||
if (node) return node;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void printSceneGraph(SceneNode* node, int level) {
|
||||
for (int i = 0; i < level; i++) {
|
||||
printf(" - ");
|
||||
|
@ -324,9 +335,7 @@ SceneNode* loadSceneGraphFromFile(char* path) {
|
|||
addChild(root, currentNode);
|
||||
}
|
||||
|
||||
mat4 rootTransform;
|
||||
identity(&rootTransform);
|
||||
updateSceneNode(root, &rootTransform);
|
||||
updateSceneNode(root, NULL);
|
||||
|
||||
printSceneGraph(root, 0);
|
||||
|
||||
|
|
|
@ -26,12 +26,15 @@ struct SceneNode {
|
|||
char* name;
|
||||
};
|
||||
|
||||
extern SceneNode* findNode(int id, SceneNode* root);
|
||||
extern SceneNode* findNodeByName(char* name, SceneNode* root);
|
||||
extern void setNodeRenderFunction(void (*newRenderFunction)(SceneNode*));
|
||||
extern SceneNode* createSceneNode();
|
||||
extern void addChild(SceneNode* parent, SceneNode* child);
|
||||
extern void updateSceneNode(SceneNode* node, mat4* parentTransformation);
|
||||
extern void renderSceneNode(SceneNode* node);
|
||||
extern void freeSceneNode(SceneNode* node);
|
||||
extern void printSceneGraph(SceneNode* root, int level);
|
||||
extern SceneNode* loadSceneGraphFromFile(char* path);
|
||||
|
||||
#endif
|
|
@ -4,23 +4,35 @@ texture ../texture/crate/texture.jpg
|
|||
|
||||
obj 0
|
||||
use 0
|
||||
scale 0.1 1.0 0.1
|
||||
scale 1.0 0.3 1.0
|
||||
name box1
|
||||
|
||||
obj 1
|
||||
parent 0
|
||||
scale 0.2 0.8 0.2
|
||||
translate 0.5 0.0 0.0
|
||||
name box2
|
||||
translate 2.0 0.0 0.0
|
||||
|
||||
obj 2
|
||||
use 0
|
||||
parent 1
|
||||
scale 0.3 0.6 0.3
|
||||
translate 0.5 0.0 0.0
|
||||
name box3
|
||||
scale 0.7 1.5 0.7
|
||||
name box2
|
||||
|
||||
obj 3
|
||||
parent 2
|
||||
scale 0.4 0.4 0.4
|
||||
translate 0.5 0.0 0.0
|
||||
translate 2.0 0.0 0.0
|
||||
|
||||
obj 4
|
||||
use 0
|
||||
parent 3
|
||||
scale 0.7 1.5 0.7
|
||||
name box3
|
||||
|
||||
obj 5
|
||||
parent 4
|
||||
translate 2.0 0.0 0.0
|
||||
|
||||
obj 6
|
||||
use 0
|
||||
parent 5
|
||||
scale 0.7 1.5 0.7
|
||||
name box4
|
Loading…
Reference in New Issue