opengl 3d 2d 混合渲染

基本的矩阵变换主要包括两个

glMatrixMode(GL_PROJECTION) 设置投影变换

投影变换主要包括使用 perspective 还是 ortho 投影.


glMatrixMode(GL_MODELVIEW) 设置 model view 变换.

modelview 变换主要包括 view变化,类似 gluLookAt()设置camera 位置&朝向&旋转,

和设置各个待绘制物体的 translation,rotation,scale.


同一帧渲染中,可以通过修改投影变换的方式( perspective/ortho ),来进行混合3d 2d的渲染.

即使都是3d 渲染,也可以通过临时修改 view 变换矩阵,绘制另外一些物体,然后再恢复回来继续绘制,来达到一些特殊的效果.


代码

#include<iostream>
#include<gl/glut.h>

#define	drawOneLine(x1,y1,x2,y2)	glBegin(GL_LINES);\
	glVertex2f((x1),(y1));	glVertex2f((x2),(y2));	glEnd();

void init()
{
	glClearColor(0.0,0.0,0.0,0.0);
	glShadeModel( GL_FLAT );
}

void display()
{
	int i;
	glClear( GL_COLOR_BUFFER_BIT );
	
	//	render 3d

	glMatrixMode( GL_PROJECTION );
	gluPerspective( 60,2.0f,0.00001,1000.0);

	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();

	gluLookAt( 0,0,10, 0,0,0, 0,1,0);
	glColor3f( 1.0f,1.0f,0.0f);
	::glutWireCube( 1.0f);
	
	//	render 2d
	glMatrixMode( GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D( 0.0,(GLdouble)800,0.0,(GLdouble)600);

	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();	

	glColor3f( 1.0f,0.0f,0.0f);
	glBegin( GL_POLYGON);
	glVertex2f( 0,0);
	glVertex2f( 500,0);
	glVertex2f( 0,500);
	glEnd();

	glFlush();
}

void reshape( int w,int h)
{
	glViewport( 0,0,(GLsizei)w,(GLsizei)h);

	
}

int main( int argc,char** argv)
{
	glutInit( &argc,argv);
	glutInitDisplayMode( GLUT_SINGLE|GLUT_RGB);
	glutInitWindowPosition(100,100);
	glutInitWindowSize(800,600);
	glutCreateWindow( "ogl1");

	init();

	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutMainLoop();
}

效果

后面的黄色 wire cube 是 3d 透视投影渲染出来的

前面红色的三角形是 2d 正交投影渲染出来的



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用:在学习OpenGL 2D方面,有一个可以参考的工程是使用Qt实现的一个将2D纹理贴到球面的项目。该项目还包括混合光和采用了OpenGL ES 3.0。初学者可以通过学习这个项目来了解OpenGL 2D的应用和实现方法。 如果你对OpenGL 2D的学习感兴趣,你可以尝试以下几个步骤来深入学习: 1. 理解OpenGL的基本概念和原理。OpenGL是一个跨平台的图形库,用于渲染2D3D图形。了解OpenGL的基本概念和工作原理是学习OpenGL 2D的重要基础。可以通过阅读相关的教程或书籍来学习这些概念。 2. 学习OpenGL的绘图函数和API。OpenGL提供了一系列的函数和API,用于绘制2D3D图形。学习这些函数和API的使用方法,可以帮助你实现各种2D效果。可以通过阅读OpenGL的官方文档或者参考一些教程来学习这些函数和API的使用方法。 3. 熟悉OpenGL的着色器语言。OpenGL使用着色器语言来编写图形的渲染代码。了解如何编写着色器代码可以帮助你实现各种自定义的渲染效果。可以通过阅读相关的教程或者参考一些示例代码来学习这个语言。 4. 参考一些开源项目或者示例代码。通过参考一些已经实现的项目或者示例代码,可以帮助你更好地理解OpenGL 2D的实现方法和技巧。可以尝试去理解这些项目的代码,并且根据自己的需求进行修改和扩展。 总之,学习OpenGL 2D需要一定的基础知识和实践经验。通过阅读教程、参考文档、学习示例代码和实践项目,你可以逐步提升自己的OpenGL 2D编程能力。祝你学习顺利!<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [qt opengl 2d纹理到球面](https://download.csdn.net/download/wanghualin033/10698789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [基于OpenGL的计算机图形学实验NURBS曲线算法](https://download.csdn.net/download/weixin_53249260/88236784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值