请问懂基于mfc的opengl编程大神们,图中这个基于mfc的opengl编程窗口是用什么函数显示出来的?MFC编程

大神请进!如图所示是在MFC中的View视图中渲染OpenGL视场,显示一个模型。_百度知道
大神请进!如图所示是在MFC中的View视图中渲染OpenGL视场,显示一个模型。
com/zhidao/pic/item//zhidao/pic/item/0b7b0b10abe56522c11dfa8ecce9d.jpg" esrc="TextOut://d://d.com/zhidao/wh%3D450%2C600/sign=dc/0b7b0b10abe56522c11dfa8ecce9d.hiphotos.baidu.baidu://a://d.com/zhidao/wh%3D600%2C800/sign=/zhidao/wh%3D450%2C600/sign=d1f76dbabd0e7bec238f0be51a1e950e/b3fbacb8://a.com/zhidao/wh%3D600%2C800/sign=c62beff166d224f4acb8.hiphotos.hiphotos.jpg" esrc="http,然而发现如图所示的问题.hiphotos.jpg" />文本是用TextOut输出的,设置文本透明之后.hiphotos,因为是用pDC-&gt.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><a href="http<a href="http,文本的背景不会覆盖掉模型呢
我有更好的答案
文本输出背景模式设为透明即可
其他类似问题
为您推荐:
视场的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁学习 OpenGL 用哪个版本好?
熟悉C++,MFC,GDI,但是不熟悉图形,现在学OpenGL,网上都推荐OpenGL编程指南和OpenGL超级宝典两本书,还说超级宝典翻译的不好,那我应该买哪个?买第几版的?
按投票排序
不同意入门用NEHE的建议。虽然十分经典,但经典也意味着老旧,全是固定管线内容,且不成体系。如果需要和一些固定管线的老代码打交道,那NEHE还是值得一看的。同意,至少从GL 2.0看起(目前已经4.3了)。一定得熟悉VAO/VBO/FBO等等。我曾耗费很多时间学固定管线,但学了shader后才感觉走上了正道,才是真正地零距离接触到了pipeline。当你去自己生成MVP、自己实现Phong Shading时,和简单的用一下glTranslatef, glLightfv这些API的感觉是不一样的。关于用什么书,我以前回答过这个问题。另外网上教程也有蛮多,我所知比较好的有(欢迎补充)
OpenGL 3.3+ Tutorial[我正在翻译这个教程,断断续续做了一年多。你可以通过切换语言看到我最初的翻译。后来我们还在做修订。可耻地做个广告]关于OpenGL ES/WebGL我知道的挺少,欢迎补充。补充(日10:11:42):如果想在Mac上学OpenGL,这个Apple官方网站真心很不错,这个页面上有个视频讲解怎样从固定管线迁移到Shader,讲的很好。修改时间 日21:24:53OpenGL蓝宝书已有第六版,红宝书有第八版,均完全剔除固定管线内容,全面介绍shading language。
什么版本都不用管 先实现一遍底层的光栅化的3D渲染算法,只用一个画像素的功能,把插值,zbuffer,alpha,阴影,三角形的光栅化,全自己底层实现一遍,之后进阶挑nvidia 的sdk里的例子逐句看,siggraph早期的gpgpu的论文挑自己觉得有趣的去实现,shaderX,gpu gems里头拿感兴趣的实现,我就是这么过来的,后来去了皮克斯做R&D,现在在Weta Digital做R&D
不要看中文书,里面基本只有固定管线的内容..起码从2.0开始学起.
@vczh 我记得DX10有兼容性问题吧……建议直接上DX11。DX10开始的可编程管线(好吧OGL也有),谁用谁爽。新的接口也清晰很多。入门可以看看这本书《Beginning DirectX 11 Game Programming》不过如果我没记错的话,应该有一部分代码有有错的(我猜他们直接从10那本复制代码了 笑)。不大确定这本书有没有中文的,不过这本书已经简单到可以直接看懂了吧。。绝对是入门级的书……话说各种&S&抄袭&/S&XNA的即使感……好吧这句纯吐槽&&。各种意义上不建议买实体的,弄个pdf会更方便一些。至于OpenGL这倒霉玩意……反人类的设计,反人类的手册,反正我是被恶心了个不行……(架构上我没有深入了解……反正某些设计把我恶心个不行之后我就放弃这玩意了)如果一定要,我觉得弄个红包书 + opengl的函数手册应该就能看懂了。
题主如果不懂图形学的话,无论决定买哪本书,裂墙建议先把图形学的一些基本原理给搞明白。其中个人,以及所有我认识的搞图形学的人一致认为十分重要、强调一万分都不为过的两个知识点是:1、OpenGL渲染管线!!!!!!2、物体-世界-相机-裁剪-视口 坐标变换!!!!!!毕竟OpenGL只是个API,是工具,把原理搞明白了,理解了,工具上手会快很多。即便你将来想转DirectX也就是换个API,换汤不换药,大致思想是一致的。另外要看书的话,红宝和蓝宝书早期版本以固定管线为例讲解的就可以不要看了,直接从shader搞起吧。
买第八版的红宝书
看了几个答案,再加上自己看的资料,综合下,觉得这些资源不错:(备注:特指 modern opengl 的学习,即 opengl 3.0 以上, 和 可编程渲染流水线)。(1)gamedev 上
写的引导教程,非常不错。和它所在的:gamedev 的 opengl 专栏:(2)前面有人推荐和翻译的:不过课程较少。但是对一些科普性内容写的不错。(3)另一个问题下有人推荐的:Jason L. McKesson----个人觉得,必须需要学习的一些基础知识包括:(1)model,view,projection 变换;(2)和几何变换对应的矩阵和向量的运算。cross,dot 等。(3)渲染 pipeline 的流程,各个阶段的职责工作。(4)depth 缓冲。
大学的时候我用了四年的OpenGL,毕业后我用DirectX10,然后回过头来看看OpenGL新版本的架构,觉得是在跟DirectX差了一代,OpenGL只能跟D3D8或者9的时候进行类比。看一下题主用的显然是Windows,那应该义不容辞的使用DirectX10。D9也不要用了,架构跟OpenGL一样落后,是不能学到靠谱的东西的。二次元同好交流新大陆
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
&结果分析:默认的glViewport(0, 0, 400, 400)的纵横比 width:height = 1:1而此处设置的纵横比为1:2,因此显示结果是width压缩了1/2。注意纵横比1:2中较大的2对应了平行视景体中物体的实际尺寸。
int main(int argc, char** argv){&glutInit(&argc, argv);&glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);&glutInitWindowPosition(150, 150);&glutInitWindowSize(400, 400);&glutCreateWindow("OpenGL中默认的reshape()函数");&init();&glutDisplayFunc(display);&glutReshapeFunc(reshape);&glutMainLoop();&return 0;}
2) glViewport中的纵横比为2:1,时对显示结果的影响
#include "gl/glut.h"void display(void){&&&& glClearColor(0.0,0.0,0.0,0.0);&&&& glClear(GL_COLOR_BUFFER_BIT);
&&&& glColor4f(1.0,1.0,1.0,1.0);& glRectf(0.25,0.25,0.75,0.75);
&&&& glFlush();}
void init(void){&&&& glClearColor(0.0, 0.0, 0.0, 0.0);&&&& glShadeModel(GL_FLAT);&& }
void reshape(int w, int h){&glMatrixMode(GL_PROJECTION); &glLoadIdentity(); &gluOrtho2D(0, 1, 0, 1);&glViewport(0,0,400,200); // the height of view port is half of the window size &//glViewport(0, 0, (GLsizei) w, (GLsizei) h); // resizing according to dragging}
&int main(int argc, char** argv){&glutInit(&argc, argv);&glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);&glutInitWindowPosition(150, 150);&glutInitWindowSize(400, 400);&glutCreateWindow("glViewport(0,0,400,200)");&init();&glutDisplayFunc(display);&glutReshapeFunc(reshape);&glutMainLoop();&return 0;}
(四)Window size的变化对显示结果的影响。
Window size对显示结果的影响是不好对其进行修正的,所以选择合适的窗口尺寸对于图形显示来说很重要
#include "gl/glut.h"void display(void){&&&& glClearColor(0.0,0.0,0.0,0.0);&&&& glClear(GL_COLOR_BUFFER_BIT);
&&&& glColor4f(1.0,1.0,1.0,1.0); //注意没有显式的转到ModelView模式&&&& glRectf(0.25,0.25,0.75,0.75);
&&&& glFlush();}
void init(void){&&&& glClearColor(0.0, 0.0, 0.0, 0.0);&&&& glShadeModel(GL_FLAT);&& }
void reshape(int w, int h){&glMatrixMode(GL_PROJECTION); &glLoadIdentity(); &gluOrtho2D(0, 1, 0, 1);&//glViewport(0,0,400,200);&this&setting&is not a good solution to the imaging distortion&//glViewport(0, 0, 200, 400); // the default view port size is the same as the window size,uncommenting this line makes no difference to the displaying result.}
int main(int argc, char** argv){&glutInit(&argc, argv);&glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);&glutInitWindowPosition(150, 150);&glutInitWindowSize(200, 400);&glutCreateWindow("Window Size (200, 400)");&init();&glutDisplayFunc(display);&glutReshapeFunc(reshape);&glutMainLoop();&return 0;}
阅读(4682)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'OpenGL Glut剖析(3)--重绘回调函数的使用',
blogAbstract:'
(一)引言
&&&&& 有过Windows GDI编程经验的人都知道当窗口的尺寸发生变化时,或该窗口被另外一个窗口遮住时窗口应该发生重绘。OpenGL当然也不例外。例如下面一段程序运行后拖动窗口的边沿窗口以及里面显示的物体大小会随之变化。由于我们没有处理ON_PAINT消息,也没有编写重绘的回调函数,此时窗口中的图形没有消失说明该窗口已经进行了重绘。此时操作系统调用的是Glut中默认的重绘回调函数。从OpenGL Glut剖析(2)的讲解可以看出该重绘回调函数没',
blogTag:'opengl',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:2,
publishTime:6,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:2,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}}

我要回帖

更多关于 opengl编程指南 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信