如何设置对象转换,属性?

时间:2015-08-31 10:09:42

标签: c++ opengl

我是OpenGL的新手,也是在线课程做作业的。我的第一个任务是用以下代码填充煎锅:旋转,缩放,平移,透视,左/右移动,上/下。我做到了,但遇到了下一个任务的问题:设置转换。你能告诉我一个例子或一些链接怎么做? 任何帮助都会很感激。

  for (int i = 0 ; i < numobjects ; i++) {
    object* obj = &(objects[i]); 

    // Set up the object transformations 
    // And pass in the appropriate material properties
    // Again glUniform() related functions will be useful

    // Actually draw the object
    // We provide the actual glut drawing functions for you.  
    // Remember that obj->type is notation for accessing struct fields


    if (obj->type == cube) {
      glutSolidCube(obj->size); 
    }
    else if (obj->type == sphere) {
      const int tessel = 20; 
      glutSolidSphere(obj->size, tessel, tessel); 
    }
    else if (obj->type == teapot) {
      glutSolidTeapot(obj->size); 
    }

  }
const int maxobjects = 10 ; 
EXTERN int numobjects ; 
EXTERN struct object {
  shape type ; 
  GLfloat size ;
  GLfloat ambient[4] ; 
  GLfloat diffuse[4] ; 
  GLfloat specular[4] ;
  GLfloat emission[4] ; 
  GLfloat shininess ;
  mat4 transform ; 

} objects[maxobjects];

1 个答案:

答案 0 :(得分:1)

现代OpenGL中的转换是通过在着色器中使用统一矩阵来完成的。基本上,您必须查询转换变量的统一位置(glGetUniformLocation),然后使用glUniformMatrix4fvobj->transform成员传递到此位置。

对于材质参数,工作流程基本相同,但使用适合该类型的不同glUniform *调用。