一、目的
1、画一个球体;
二、程序运行结果
球体
三、球体的生成
球面坐标计算示意图
1、将球体横向向切成30片, 纵向切30片,共900个点,见示意图
2、循环生成900个点的空间坐标(x,y,z),球面上点C的坐标
3、 x= R * cos(NumAngleHy) * cos(NumAngleZx)
4、 y = R * sin(NumAngleHy)
5、 z = R * cos(NumAngleHy) * sin(NumAngleZx)
6、将900个点按顺序存入顶点缓冲区,
7、将相邻的三个点的顺序索引值存入索引缓冲区。
8、调用OpenGL动态管线进行渲染。
四、glPolygonMode函数
功能:用于控制多边形的显示方式
glPolygonMode是一个函数,原型是:void glPolygonMode(GLenum face,GLenum mode);
face这个参数确定显示模式将适用于物体的哪些部分,控制多边形的正面和背面的绘图模式:
GL_FRONT表示显示模式将适用于物体的前向面(也就是物体能看到的面)
GL_BACK表示显示模式将适用于物体的后向面(也就是物体上不能看到的面)
GL_FRONT_AND_BACK表示显示模式将适用于物体的所有面
mode这个参数确定选中的物体的面以何种方式显示(显示模式):
GL_POINT表示显示顶点,多边形用点显示
GL_LINE表示显示线段,多边形用轮廓显示
GL_FILL表示显示面,多边形采用填充形式
五、源代码
"""
程序名称:GL_DrawSphere01.py
编程: dalong10
功能: 画一个球体
参考资料:
"""
import myGL_Funcs #Common OpenGL utilities,see myGL_Funcs.py
import sys, random, math
import OpenGL
from OpenGL.GL import *
from OpenGL.GL.shaders import *
import numpy
import numpy as np
import glfw
strVS = """
#version 330 core
layout(location = 0) in vec3 position;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
uniform float a;
uniform float b;
uniform float c;
uniform float Rx;
uniform float Ry;
uniform float Rz;
uniform float theta1;
void main(){
mat4 rot1=mat4(vec4(1.0, 0.0,0.0,0),
vec4(0.0, 1.0,0.0,0),
vec4(0.0,0.0,1.0,0.0),
vec4(