OpenGL库glut中的常用模型生成函数

void glutWireSphere(GLdouble radius, GLint slices, GLint stacks); 线框球
void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); 实心球

void glutWireCube(GLdouble size); 线框立方体
void glutSolidCube(GLdouble size); 实心立方体

void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings); 线框圆环
void glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings); 实心圆环

void glutWireIcosahedron(void); 线框20面体
void glutSolidIcosahedron(void); 实心20面体

void glutWireOctahedron(void); 线框8面体 
void glutSolidOctahedron(void); 实心8面体

void glutWireTetrahedron(void); 线框4面体
void glutSolidTetrahedron(void); 实心4面体

void glutWireDodecahedron(GLdouble radius); 线框12面体
void glutSolidDodecahedron(GLdouble radius); 实心12面体

void glutWireCone(GLdouble radius, GLdouble height, GLint slices, GLint stacks); 线框圆锥体
void glutSolidCone(GLdouble radius, GLdouble height, GLint slices, GLint stacks); 实心圆锥体

void glutWireTeapot(GLdouble size); 线框茶壶
void glutSolidTeapot(GLdouble size); 实心茶壶

函数中,radius表示球体的半径,slices表示球体围绕z轴分割的数目,stacks表示球体沿着z轴分割的数目。

绘制中心在模型坐标原点,半径为radius的球体,球体围绕z轴分割slices次,球体沿着z轴分割stacks次

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenGL,要实现一帧一帧的变化,通常需要使用定时器或者游戏循环来控制每一帧的时间和渲染。通过修改变量的值,可以在每一帧生成不同的模型,例如位置、旋转、缩放等参数。 具体实现步骤如下: 1. 在初始化OpenGL时,设置定时器或者游戏循环。 2. 在定时器或者游戏循环,更新需要改变的变量的值,例如位置、旋转、缩放等参数。 3. 在渲染时,使用这些变量的值来生成不同的模型效果。 示例代码: ```c++ void render() { // 清除颜色缓冲区 glClear(GL_COLOR_BUFFER_BIT); // 更新变量的值 position += speed * delta_time; rotate_angle += rotate_speed * delta_time; // 生成模型矩阵 glm::mat4 model = glm::mat4(1.0f); model = glm::translate(model, position); model = glm::rotate(model, glm::radians(rotate_angle), glm::vec3(0.0f, 0.0f, 1.0f)); model = glm::scale(model, scale); // 绑定模型矩阵到着色器变量 glUniformMatrix4fv(glGetUniformLocation(shader_program, "model"), 1, GL_FALSE, glm::value_ptr(model)); // 渲染模型 glBindVertexArray(vao); glDrawArrays(GL_TRIANGLES, 0, 36); glBindVertexArray(0); // 刷新缓冲区 glutSwapBuffers(); } void update() { // 计算每一帧的时间差 double current_time = glutGet(GLUT_ELAPSED_TIME) / 1000.0; delta_time = current_time - last_time; last_time = current_time; // 重绘窗口 glutPostRedisplay(); } int main(int argc, char **argv) { // 初始化OpenGLGLUT glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); glutInitWindowSize(800, 600); glutCreateWindow("OpenGL Demo"); // 初始化GLEW glewExperimental = GL_TRUE; glewInit(); // 设置回调函数 glutDisplayFunc(render); glutIdleFunc(update); // 启用深度测试 glEnable(GL_DEPTH_TEST); // 编译着色器程序 shader_program = compile_shader_program(vertex_shader_source, fragment_shader_source); // 创建模型 create_model(); // 进入主循环 glutMainLoop(); return 0; } ``` 在上面的代码,我们通过定时器和游戏循环来更新每一帧需要改变的变量,例如位置和旋转角度。然后使用这些变量来生成模型矩阵,并将模型矩阵绑定到着色器变量。最后,在渲染时,使用模型矩阵来渲染模型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值