记录下代码

https://bitbucket.org/rndblnch/opengl-programmable/src/tip/10-gl3.2core.py?fileviewer=file-view-default

部分代码借用了上述链接

shader.py

# coding: utf-8
from OpenGL.GL import *import sys
##############################################################################
# Shader
##############################################################################
# Checks for GL posted errors after appropriate callsshader=None
def printOpenGLError():err = glGetError()if (err != GL_NO_ERROR):print('GLERROR: ', gluErrorString(err))#sys.exit()class Shader(object):def initShader(self, vertex_shader_source, fragment_shader_source):# create programself.program=glCreateProgram()print('create program')printOpenGLError()# vertex shaderprint('compile vertex shader...')self.vs = glCreateShader(GL_VERTEX_SHADER)glShaderSource(self.vs, [vertex_shader_source])glCompileShader(self.vs)glAttachShader(self.program, self.vs)printOpenGLError()# fragment shaderprint('compile fragment shader...')self.fs = glCreateShader(GL_FRAGMENT_SHADER)glShaderSource(self.fs, [fragment_shader_source])glCompileShader(self.fs)glAttachShader(self.program, self.fs)printOpenGLError()print('link...')glLinkProgram(self.program)printOpenGLError()def begin(self):if glUseProgram(self.program):printOpenGLError()def end(self):glUseProgram(0)

三角形的坐标设定,shader 代码 。主要了解到ctypes库。pyopengl库中接口的参数传递,数据类型有此库帮助更加易用。

起初一直是黑色屏幕,没有显示出三角形。加入glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)此句清除framebuffer的则可以正常输出了

# coding: utf-8
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
from ctypes import sizeof, c_float, c_void_p, c_uint, string_atfrom shader import *
#https://bitbucket.org/rndblnch/opengl-programmable/src/tip/10-gl3.2core.py?fileviewer=file-view-defaultmyvertices = [-0.5, -0.7, 0.0,0.5, -0.5, 0.0,0.0,  0.5, 0.0]
def mydraw():# clearglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)# view#glMatrixMode(GL_MODELVIEW)#glLoadIdentity()buffers = glGenBuffers(1)float_size = sizeof(c_float)vertex_offset    = c_void_p(0 * float_size)glBindBuffer(GL_ARRAY_BUFFER, buffers)glBufferData(GL_ARRAY_BUFFER, len(myvertices)*4,  # byte size(ctypes.c_float*len(myvertices))(*myvertices), GL_STATIC_DRAW)glEnableClientState(GL_VERTEX_ARRAY)glVertexAttribPointer(0,3,GL_FLOAT, False, 3 * float_size, vertex_offset)glEnableVertexAttribArray(0) global shaderif shader==None:shader=Shader()shader.initShader('''layout (location = 0) in vec3 aPos;void main(){gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);}''','''out vec4 FragColor;void main(){FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);}''')shader.begin()glDrawArrays(GL_TRIANGLES, 0, 3)#glFlush()shader.end()glDisableVertexAttribArray(0)##############################################################################
def disp_func():#draw()mydraw()glutSwapBuffers()if __name__=="__main__":glutInit(sys.argv)glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)glutInitWindowSize(256, 256)glutCreateWindow(b"vbo")glutDisplayFunc(disp_func)glutIdleFunc(disp_func)#glutReshapeFunc(reshape_func)#initialize()glutMainLoop()

opengl之triangel相关推荐

  1. OpenGL ES 2.0学习之路---2.Hello Triangel:一个OpenGL ES 2.0例子

    该例子主要包括以下内容: 使用EGL创造一个显示渲染窗口平面 装载顶点和片段着色器 创造一个项目,联系顶点和片段着色器,链接项目 设置视窗 清除颜色缓冲区 最基本的渲染 在EGL窗口显示颜色缓冲区的内 ...

  2. OpenCL,OpenGL编译

    OpenCL,OpenGL编译 TVM已经支持多个硬件后端:CPU,GPU,移动设备等-添加了另一个后端:OpenGL / WebGL. OpenGL / WebGL能够在没有安装CUDA的环境中利用 ...

  3. OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?

    OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...

  4. Android OpenGL ES(十一)绘制一个20面体 .

    前面介绍了OpenGL ES所有能够绘制的基本图形,点,线段和三角形.其它所有复杂的2D或3D图形都是由这些基本图形构成. 本例介绍如何使用三角形构造一个正20面体.一个正20面体,有12个顶点,20 ...

  5. c++之openGL在VS中的配置及简单图形绘制

    VS中openGL的配置 相关资源下载: 链接:https://pan.baidu.com/s/1hRlxbckgLsNiS87k5CPvLg 提取码:tz87 以vs2010为例: 将下载的压缩包解 ...

  6. 利用OpenGL渲染并用OpenCV输出显示二维图像

    OpenGL所有渲染的结果都输出显示在窗口中,设置OpenCV的图像cv::Mat outimg,并使用OpenGL的glReadPixels从帧缓冲区中加载像素至内存: //use fast 4-b ...

  7. 解决Qt+OpenGL更换图像纹理的问题

    2020.2.5 疫情持续蔓延,在家无聊便解决标题所述问题. 若纹理加载是initializeGL()中,而在QtOpenGL的initializeGL()在程序运行时只运行一次,如果我的图像是通过上 ...

  8. opengl库区分:glut、freeglut、glfw、glew、gl3w、glad

    opengl原生库 gl* 随opengl一起发布 opengl实用库 glu* 随opengl一起发布 opengl实用工具库glut glut* 需要下载配置安装(太老了!) opengl实用工具 ...

  9. OpenGl的glMatrixMode()函数理解

    https://blog.csdn.net/jiangdf/article/details/8460012 glMatrixMode()函数的参数,这个函数其实就是对接下来要做什么进行一下声明,也就是 ...

最新文章

  1. mysql实验6语言结构_实验六 SQL语言数据查询语言DQL.pdf
  2. seg是伪操作符,用来取后面符号的段地址
  3. PYTHON系列-从零开始的爬虫入门指南
  4. cnn卷积神经网络_卷积神经网络(CNN)原理及应用
  5. Java实现敏感词过滤 - IKAnalyzer中文分词工具
  6. 苹果iOS 10.3.1修复博通Wi-Fi芯片重大安全漏洞
  7. 支撑1300+矿井监控,华为云数据库助力打造智能矿山
  8. CentOS 7 上安装 MySQL5.7
  9. 矩池云上复现论文 Neural Graph Collaborative Filtering 环境复现
  10. python执行过程_Python threading模块condition原理及运行流程详解
  11. SQL Server编写存储过程小工具(三)
  12. Selenium2 Python自动化测试实战(第二版)第一部分 自动化测试基础-总结笔记
  13. GEE学习笔记3:Landsat8 植被指数计算
  14. 永远感谢雷神-雷霄骅!
  15. “被裁员之前,没得到任何风声,措手不及...” 一个在职6年测试工程师内心独白
  16. 纽约Airbnb房源数据挖掘与房价预测评估模型
  17. ASP.NET程序设计复习题
  18. 自动适配跳转电脑PC端和手机WAP端
  19. iPhone软件开发前需认真考虑问题
  20. PS 2019 Mac版 自学入门系列(三)——插入对象

热门文章

  1. python 对excel的交互工具的使用
  2. OpenGL 学习笔记III: 图形管线、三角形、shader 流水线
  3. catia画变截面弯管
  4. Attention注意力机制--原理与应用
  5. 计算机名称内的隶属于无法更改,win7计算机名称怎么修改-修改win7计算机名称的方法 - 河东软件园...
  6. alpha hull
  7. java springBoot实现QQ机器人,定时发送信息,自动回复功能
  8. PyQt5实现侧面菜单栏-仿QQ设置--以及透明选中按钮效果(详细讲解)
  9. 戴比尔斯视中国为“最核心”市场
  10. IP 地址分类(A、B、C、D、E类)