精华内容
下载资源
问答
  • Opengl 模板

    2014-11-26 19:43:16
    使用wxWidget完成NeHe教材的模板
  • OpenGL模板 一些OpenGL模板代码。
  • 自己做的OPENGL模板

    2012-04-06 16:47:54
    自己做的OPENGL模板 自己做的OPENGL模板 自己做的OPENGL模板
  • mfc opengl 模板 vc++

    2011-03-10 22:20:02
    mfc opengl 模板 vc++ 可直接绘图使用
  • OpengL C++ 模板OpengL C++ 模板OpengL C++ 模板OpengL C++ 模板OpengL C++ 模板
  • OPENGL模板MFC

    2008-12-30 16:19:55
    这是在MFC基础上编写的OPENGL模板 可以用于继续开发,或者进行各种编辑删除操作 VC6.0编译通过
  • OpenGL模板 我在流上使用的只是一个简单的OpenGL模板。 控制项 捷径 描述 q 放弃 F5 重新加载和着色器。 红屏表示编译或链接错误,请查看程序的输出(如果看到)。 空间 暂停/取消暂停着色器中的时间均匀变量 ← ...
  • 使用VC++ 6.0中的MFC实现的openGL模板, 可在其中进行各种图形学运算.
  • OpenGl 模板程序 c++语言编写 非常实用的模板 适合程序员直接使用
  • OpenGl模板(中文界面)c++语言编写 适合程序员直接使用 方便实用
  • VC6.0的OpenGL模板程序

    2008-12-30 16:39:03
    这是一个基于VC6.0的单文档的OpenGL模板程序。记得刚刚学OpenGL的时候到处找OpenGL的框架程序,找到一些OpenGL的代码片段时也没办法试,现在只需要在COpenglTemplateView::OnDraw()函数中填入OpenGL绘图代码,就可以...
  • OpenGL模板缓冲区应用示例源代码,代码比较简单,通过修改或注释模板缓冲区控制语句就可以明白其中奥秘。
  • opengl模板测试实例

    2019-09-17 16:28:51
    opengl中, 可以开启模板测试功能,来限定某一部分是可画的,某一部分是不可画的。这可通过设置模板模式来控制哪部分是可画的,有点类似在墙上喷字。 虽说剪刀测试也可以限定蓝屏的某一部分可画,但不适用于不...

    在opengl中, 可以开启模板测试功能,来限定某一部分是可画的,某一部分是不可画的。这可通过设置模板模式来控制哪部分是可画的, 有点类似在墙上喷字。 

    虽说剪刀测试也可以限定蓝屏的某一部分可画,但不适用于不规则的区域,不如模板测试灵活。下面提供一个Android模板测试的实例代码:

     

    public class MyRenderer implements Renderer {
    
    	private Square square1 = null;
    	
    	private FloatBuffer vertices = null;
    	
        // Step size in x and y directions
    	// (number of pixels to move each time)
    	private float x = 0;
    	private float y = 0;
    	private float xstep = 1.0f;
    	private float ystep = 1.0f;
    
    	// Keep track of windows changing width and height
    	private float windowWidth;
    	private float windowHeight;
    	
    	public MyRenderer(Context ctx) {
    		square1 = new Square(ctx, false);
    
    	}
    	
    	private void makeStencilPattern(GL10 gl) {
    		
    		float dRadius = 0.1f;
    	    
    	    ByteBuffer bb = ByteBuffer.allocateDirect(4000 * 4 * 2);
    	    bb.order(ByteOrder.nativeOrder());
    	    vertices = bb.asFloatBuffer();
    	    vertices.position(0);
    	    
            for(float dAngle = 0; dAngle < 400.0; dAngle += 0.1)
            {
            	vertices.put((float) (dRadius * Math.cos(dAngle)));
            	vertices.put((float) (dRadius * Math.sin(dAngle)));
                dRadius *= 1.002;
            }
     
            vertices.position(0);
    
    	}
    	
    	@Override
    	public void onDrawFrame(GL10 gl) {
    
    		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_STENCIL_BUFFER_BIT);
    		// Replace the current matrix with the identity matrix
    		gl.glMatrixMode(GL10.GL_MODELVIEW);
    		gl.glLoadIdentity();
    		
    	    gl.glStencilFunc(GL10.GL_NEVER, 0x0, 0x0);
    	    gl.glStencilOp(GL10.GL_INCR, GL10.GL_INCR, GL10.GL_INCR);
    		
    		gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    		gl.glVertexPointer(2, GL10.GL_FLOAT, 0, 
                    vertices);
    		gl.glColor4f(0, 1, 1, 1);
    		gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 4000 * 2);
    		
    	    gl.glStencilFunc(GL10.GL_NOTEQUAL, 0x1, 0x1);
    	    gl.glStencilOp(GL10.GL_KEEP, GL10.GL_KEEP, GL10.GL_KEEP);
    		gl.glColor4f(1, 0, 0, 1);
    		
            // Reverse direction when you reach left or right edge
            if(x > windowWidth-20 || x < -windowWidth)
                xstep = -xstep;
    
            // Reverse direction when you reach top or bottom edge
            if(y > windowHeight || y < -windowHeight + 20)
                ystep = -ystep;
    
    
            // Check bounds. This is in case the window is made
            // smaller while the rectangle is bouncing and the 
        	// rectangle suddenly finds itself outside the new
            // clipping volume
            if(x > windowWidth-20)
                x = windowWidth-20-1;
    
            if(y > windowHeight)
                y = windowHeight-1; 
    
        	// Actually move the square
            x += xstep;
            y += ystep;
            
            gl.glTranslatef(x, y, 0);
    		
    		square1.draw(gl);
    
    	}
    
    	@Override
    	public void onSurfaceChanged(GL10 gl, int w, int h) {
    	    float aspectRatio;
    
    	    // Prevent a divide by zero
    	    if(h == 0)
    	        h = 1;
    			
    	    // Set Viewport to window dimensions
    	    gl.glViewport(0, 0, w, h);
    
    	    // Reset coordinate system
    	    gl.glMatrixMode(GL10.GL_PROJECTION);
    	    gl.glLoadIdentity();
    
    	    // Establish clipping volume (left, right, bottom, top, near, far)
    	    aspectRatio = (float)w / (float)h;
    	    if (w <= h) 
    	        {
    	        windowWidth = 100;
    	        windowHeight = 100 / aspectRatio;
    	        gl.glOrthof(-100.0f, 100.0f, -windowHeight, windowHeight, 1.0f, -1.0f);
    	        }
    	    else 
    	        {
    	        windowWidth = 100 * aspectRatio;
    	        windowHeight = 100;
    	        gl.glOrthof(-windowWidth, windowWidth, -100.0f, 100.0f, 1.0f, -1.0f);
    	        }
    
    	    gl.glMatrixMode(GL10.GL_MODELVIEW);
    	    gl.glLoadIdentity();
    	}
    
    	@Override
    	public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    		// TODO Auto-generated method stub
    		gl.glClearColor(0.0f, 0.0f, 1.0f, 0.0f);  
    		// Enable Smooth Shading, default not really needed.
    		gl.glShadeModel(GL10.GL_SMOOTH);
    	
    		gl.glEnable(GL10.GL_STENCIL_TEST);
    		gl.glClearStencil(0);
    		
    		makeStencilPattern(gl);
    	}
    
    }


     

    转载于:https://my.oschina.net/fuyajun1983cn/blog/263963

    展开全文
  • OPENGL模板测试

    2017-11-04 20:47:29
    http://blog.163.com/danshiming@126/blog/static/109412748201632895137788/ 其中glStencilFunc主要用于比较像素是否通过 glStencilOp更具上一步的情况,改变模板的值

    http://blog.163.com/danshiming@126/blog/static/109412748201632895137788/

    其中glStencilFunc主要用于比较像素是否通过

    glStencilOp更具上一步的情况,改变模板的值


    http://www.cnblogs.com/dragon2012/p/3760469.html

    展开全文
  • opengl模板缓冲区

    千次阅读 2013-09-15 20:17:00
    相信大家有些人对opengl模板缓冲区不是很理解,包括我最开始也是,opengl模板缓冲区其实就是采用过滤的技术来控制那些颜色可以绘制,那些不能进行绘制。这里的过滤技术也就是我们的一个控制方法,主要体现在如下...

    相信大家有些人对opengl的模板缓冲区不是很理解,包括我最开始也是,opengl的模板缓冲区其实就是采用过滤的技术来控制那些颜色可以绘制,那些不能进行绘制。这里的过滤技术也就是我们的一个控制方法,主要体现在如下两个函数glStencilFunc(GLenum func,GLint ref,GLuint mask)和glStencilOp(GLenum fail,GLenum zfail, GLenum zpass),其中

    1.glStencilFunc中的第一个参数指的是过滤函数,(如何来进行过滤),过滤函数有如下几种类型

       GL_NEVER 从来不能通过

       GL_ALWAYS 永远可以通过(默认值)

       GL_LESS 小于参考值可以通过

       GL_LEQUAL 小于或者等于可以通过

       GL_EQUAL 等于通过

       GL_GEQUAL 大于等于通过

       GL_GREATER 大于通过

       GL_NOTEQUAL 不等于通过

       在这里“通过”的意思指的是,我们在将图元绘制到帧缓冲区的时候在片段进行测试的时候是可以完全透过去的,否则的话这个片段就无法绘制到对应的颜色帧缓冲区,那么我们所

       绘制的内容也就显示不出来。通过这种控制方法来控制显示,其实这种操作在我们实际的生活中也是很常见的,例如给汽车喷漆,盖章(只会显示刻了的内容)。

    2.通过模板操作glStencil()来控制模板结果值的操作,例如,如果失败了对模板值进行加1,减1等处理。等待下一次片段处理的时候再进行新的比较,对值的过滤做新的控制。

    3.在这里我想通过这样一个例子来说明一下:

    4.可以通过调用glClearStencil()来设置清除(片段中)模板的初始化值,但是一定要记得调用glClear(GL_STENCIL_BUFFER_BIT)来清除对应的缓冲位。

    5.glStencilOp(GLenum fail,GLenum zfail, GLenum zpass) ;其中fail表示模板测试失败的操作,zfail表示模板测试成功但深度测试失败,zpass表示模板和深度测试也通过或者未执行深度或模板测试的情况。

    // stencil2.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <assert.h>
    #include <GL/glew.h>
    #include <GL/glut.h>
    
    #pragma comment(lib, "glew32.lib")
    
    void init()
    {
    	//将清除的颜色设置为蓝色
    	glClearColor(0,0,1.0,0);
    	//将清除的模板值设置为0
    	glClearStencil(0);
    	//将清除的深度值设置为1.0
    	glClearDepth(1.0f); 
    	
    	//支持模板测试
    	glEnable(GL_STENCIL_TEST);
    }
    
    void display()
    {
    	//在显示之前一定要对颜色、模板和深度缓存区进行清除
    	glClear(GL_COLOR_BUFFER_BIT|GL_STENCIL_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    
    	glLoadIdentity();
    	glTranslatef(0, 0, -20);
    
    	glStencilFunc(GL_ALWAYS, 0,0x00);
    	//glStencilFunc(GL_NEVER,0x0,0x0);
    	//glStencilOp(GL_INCR,GL_INCR,GL_INCR);//
    
    	glColor3f(1.0f,1.0f,1.0f);
    	
    	float dRadius = 5.0*(sqrt(2.0)/2.0);
    	glBegin(GL_LINE_STRIP);
    	for (float dAngel=0;dAngel<380.0;dAngel+=0.1)
    	{
    		glVertex2d(dRadius*cos(dAngel),dRadius*sin(dAngel));
    		dRadius*=1.003;
    	}
    	glEnd();
    
    	//glStencilFunc(GL_NOTEQUAL,0x1,0x1);
    	//glStencilOp(GL_INCR,GL_INCR,GL_INCR);//
    
    	glColor3f(1.0f,0.0f,0.0f);
    	glRectf(-5,-5,5,5);
    
    	glutSwapBuffers();
    }
    
    void reshape(int w, int h)
    {
    	glViewport(0,0,w,h);
    	float aspect = (w*1.0)/h;
    	
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	gluPerspective(60, aspect, 1, 100);
    
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	glutInit(&argc, argv);
    	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_STENCIL);
    	glutInitWindowPosition(200,200);
    	glutInitWindowSize(600,600);
    	glutCreateWindow(argv[0]);
    	
    	assert(GLEW_NO_ERROR == glewInit());
    	
    	init();
    	glutReshapeFunc(reshape);
    	glutDisplayFunc(display);
    	glutMainLoop();
    
    	return 0;
    }
    

    加入模板控制之后的结果:

    // stencil2.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <assert.h>
    #include <GL/glew.h>
    #include <GL/glut.h>
    
    #pragma comment(lib, "glew32.lib")
    
    void init()
    {
    	glClearColor(0,0,1.0,0);
    	glClearStencil(0);
    	glEnable(GL_STENCIL_TEST);
    }
    
    void display()
    {
    	glClear(GL_COLOR_BUFFER_BIT|GL_STENCIL_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    
    	glLoadIdentity();
    	glTranslatef(0, 0, -20);
    
    	//glStencilFunc(GL_ALWAYS, 0,0x00);
    	glStencilFunc(GL_NEVER,0x0,0x0);
    	glStencilOp(GL_INCR,GL_INCR,GL_INCR);//
    
    	glColor3f(1.0f,1.0f,1.0f);
    	
    	float dRadius = 5.0*(sqrt(2.0)/2.0);
    	glBegin(GL_LINE_STRIP);
    	for (float dAngel=0;dAngel<380.0;dAngel+=0.1)
    	{
    		glVertex2d(dRadius*cos(dAngel),dRadius*sin(dAngel));
    		dRadius*=1.003;
    	}
    	glEnd();
    
    	glStencilFunc(GL_NOTEQUAL,0x1,0x1);
    	glStencilOp(GL_INCR,GL_INCR,GL_INCR);//
    
    	glColor3f(1.0f,0.0f,0.0f);
    	glRectf(-5,-5,5,5);
    
    	glutSwapBuffers();
    }
    
    void reshape(int w, int h)
    {
    	glViewport(0,0,w,h);
    	float aspect = (w*1.0)/h;
    	
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	gluPerspective(60, aspect, 1, 100);
    
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	glutInit(&argc, argv);
    	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_STENCIL);
    	glutInitWindowPosition(200,200);
    	glutInitWindowSize(600,600);
    	glutCreateWindow(argv[0]);
    	
    	assert(GLEW_NO_ERROR == glewInit());
    	
    	init();
    	glutReshapeFunc(reshape);
    	glutDisplayFunc(display);
    	glutMainLoop();
    
    	return 0;
    }
    
    运行结果:




    展开全文
  • 看书籍或资料往往还是云里雾里的,这里写一下自己的理解...新像素的模板值:本次绘制产生的图像 ,根据每个像素是否有内容或是否被更新,都有一个模板值与之对应。凡是有像素点的地方,像素点的模板值为1;没有像素点的

    看书籍或资料往往还是云里雾里的,这里写一下自己的理解。希望对需要的人有帮助。

    简而言之:

    1. 模板缓冲区和帧缓冲区一样大
    2. 模板缓冲区初始状态是什么?
      在glClearBuffer的时候清空,所以初始状态是全为0。
    3. 模板测试什么时候进行?
      每一次你调用绘制函数的时候都会进行模板测试。一次绘制后,像素着色器会输出像素,这个像素是否写入到颜色缓冲区,取决于模板测试。
      新像素的模板值:本次绘制产生的图像 ,根据每个像素是否有内容或是否被更新,都有一个模板值与之对应。凡是有像素点的地方,像素点的模板值为1;没有像素点的地方,模板值为0。
      像素的模板值和模板缓冲区对应位置的值进行一次运算,就叫模板测试,具体的运算规则可以通过glStencilFunc来配置。在配置的运算规则下,若通过,则像素会被写到颜色缓冲区中,即将被刷新到屏幕中;若不通过,则此像素会被直接丢弃,不会更新到屏幕中。
    4. 模板缓冲区什么时候被更新?
      模板缓冲区更新需要打开开关glEnable(GL_DEPTH_TEST)。
      模板测试完成后,进行模板缓冲区更新。
      更新操作具体怎样进行,和模板测试的结果有关,可以通过函数glStencilOp来配置,成功时写入什么,失败时写入什么。

    最后说一句:
    模板缓冲区就是一个过滤网,就是用来过滤像素的。

    展开全文
  • opengl 模板测试下的镜子效果

    热门讨论 2010-07-25 17:59:50
    使用openGL模板测试,简单的镜子反射水壶的例子
  • OpenGL 模板缓冲stencil

    2019-03-27 17:46:56
    glEnable(GL_DEPTH_TEST); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);... // 记得保证我们在绘制地板的时候不会更新模板缓冲 nor...
  • opengl模板缓冲原理小感

    千次阅读 2011-11-19 21:23:03
    这篇文章是针对在你看了书本或者其他资料对opengl模板原理的一般性介绍后但又不理解模板到底是怎么工作的情况而写的,所有相关函数的原型及参数不再做详细介绍。  opengl的模板就像是挡在屏幕前的一块挡板,如果...
  • OpenGL模板测试

    千次阅读 2011-01-06 22:20:00
    模板测试 模板测试是所有OpenGL测试中比较复杂的一种。 <br />首先,模板测试需要一个模板缓冲区,这个缓冲区是在初始化OpenGL时指定的。如果使用GLUT工具包,可以在调用glutInitDisplayMode函数时在参数中...
  • MFC对话框+OpenGL,可以操作,这是个标准模板,鼠标左键右键中键都可以用
  • vc+opengl模板

    2009-03-12 20:54:31
    mfc写好的三维模板,只要在里面加代码就可以描绘很漂亮的三维图
  • 帧缓冲区有许多缓冲区构成,这些缓冲区大致分为:  颜色缓冲区:用于绘图的缓冲区,它包含... 模板缓冲区:就像使用纸板和喷漆一样精确的混图一样,当启动模板测试时,通过模板测试的片段像素点会被替换到颜色缓冲
  • 模板测试是把像素存储在模板缓冲区的值与一个参考值进行比较。根据测试的结果,对模板缓冲区中得这个值进行相应的修改。 Note:模板测试只有在存在模板缓冲区的情况下才会执行,如果不存在模板缓冲区,模板测试能够...
  • OpenGL模板 Mac Cmake OpenGL(Glut) Template

    千次阅读 2014-11-02 13:37:26
    自己经常用的一些功能做成了一个模板,有光照效果,可以用鼠标进行缩放,围绕原点旋转坐标系
  • OpenGL模板缓冲区

    千次阅读 2011-01-06 22:11:00
    模板缓冲区是什么? 模板缓冲区是一个记录每个像素信息的附加的缓冲区,很象一个 z 缓冲区。 实际上,该缓冲区就驻在 z 缓冲区的某些位中。常见的模板/z 缓冲区格式为 15 位的 z 和 1 位的模板,或 24 位的 z ...
  • 前言 在OpenGL中存在着多种缓冲区,这些缓冲区大致分为: ... 颜色缓冲区:用于绘图的缓冲区,它包含了颜色索引或者RGBA颜色数据。... 模板缓冲区(Stencil Buffer):与颜色缓冲区和深度缓冲区类似,模板
  • OpenGL红宝书第九版, 书上的代码不完整, 自己的研究成果. 这段代码是把红宝书的一个例子拷来修改的( 例子代码: https://pan.baidu.com/s/1UjyJzgQlGQn7a0k-vXrYDQ  Gouraud这个例子) 原码下载: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,302
精华内容 6,920
关键字:

opengl模板