English 中文(简体)
如何以最佳方式在公开的GL3.2中筛选出一个完整的筛选点?
原标题:What s the best way to draw a fullscreen quad in OpenGL 3.2?
  • 时间:2010-04-06 22:49:08
  •  标签:
  • opengl
  • glsl

我在碎块的裂缝中做射线。 我可以想出两条方法,为此目的进行充分筛选。 要么在单体空间中提取一个点,将投射矩阵设定为特性矩阵,要么利用地貌分螺将一个点变成一个三角地带。 前者采用即时方式,在开放式GL3.2中作了解释。 后者是新颖的,但它仍然采用直接方式来提出一点。

最佳回答

你们可以派两个三角洲,形成一个四分五裂,其外围特性分别被排到-1/1。

你们不需要在垂直/红外线上用任何矩阵来增加。

这里有一些密码样本,简单明了:

Vertex Shader:

const vec2 madd=vec2(0.5,0.5);
attribute vec2 vertexIn;
varying vec2 textureCoord;
void main() {
   textureCoord = vertexIn.xy*madd+madd; // scale vertex attribute to [0-1] range
   gl_Position = vec4(vertexIn.xy,0.0,1.0);
}

Fragment Shader:

varying vec2 textureCoord;
void main() {
   vec4 color1 = texture2D(t,textureCoord);
   gl_FragColor = color1;
}
问题回答

我要说的是,最有效的办法是绘制single“full-een”triangle。 若要覆盖整个屏幕,则需要大于实际观察室。 在挪威航天公司(以及单位空间,如果我们设定了<代码>w=1<>/code>),则总有<代码>[-1,1]。 仅仅为了完全覆盖这个领域,我们需要使双方两倍于观察港 rec,以便第三边跨越观察港的边缘,因此,我们可以例如使用下列编码(按反锁定):(-1,-1)<>>,(3,-1)<>>>>>>>>>,

我们也不需要担心牙齿。 为了在可见的观察室中实现通常的<代码>[0,1]的规范,我们只是需要使对应的电效应达到大体,而气质的干涉将产生与使用四分法时的电灯完全相同的结果。

这种做法当然可以与“无依无依无依”的提供相结合,如_demanze swer所示:

out vec2 texcoords; // texcoords are in the normalized [0,1] range for the viewport-filling quad part of the triangle
void main() {
        vec2 vertices[3]=vec2[3](vec2(-1,-1), vec2(3,-1), vec2(-1, 3));
        gl_Position = vec4(vertices[gl_VertexID],0,1);
        texcoords = 0.5 * gl_Position.xy + vec2(0.5);
}

www.un.org/Depts/DGACM/index_spanish.htm 为什么单一三角会提高效率?

这里是:not,涉及一个被挽救的垂直中继器,另一个在前端处理的小三角。 采用单一三角法的最重大效果是 无碎碎裂的斜体。

Real GPUs一贯在2x2 pixel 大小区块(“quads”)的碎块中,一成不变。 这对于计算window-space derivativeFunction是必要的。 (案文取样也隐含需要,见

如果原始材料不涵盖该块的所有4个餐厅,则剩余的碎块的斜体燃烧不会有用(除了为衍生计算提供数据之外)并且将被称为 助推器。 (甚至可通过gl_HelperInue GLSL=查询)。 详见Fabian“ryg” Giesen s blog article

如果你用两条三角套,两套双向将双向,两套双向双向,在两边,你将产生许多无用助手在两边。 效果最差的是完全平方的视力(实际比率1)。 如果你选择一个三角区,就不会有这种分立(它位于电离层之外,并赢得对冲压器的牵线),因此不会有额外的助手。

www.un.org/Depts/DGACM/index_spanish.htm 如果三角地横跨观察边界,瓦特一分钟就获得拖网,实际上将more关于万国邮联的工作

如果你阅读了有关制图管道(甚至全球语言光谱)的教科书材料,你可能会得到这种印象。 但是,真正的世界政府采用一些不同的方法,如Guard-band cfalling。 在这里,我获得了详细情况(这将是自己的一个议题),但总的想法是,如果单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单单

  • (a) 三角只延伸2D上下层/下层/下层/右翼/右翼飞机(而不是接近/农场的Z-Dimension,而后者则更加容易处理,特别是因为vert可能还有。 摄影机

  • b) 实际的垂直坐标(和所有中间计算结果,激光器在内部数据格式中均使用通用公平市价的硬件激光器。 激光器将使用固定点数据类型的具体执行宽度,而垂直涂层为32Bit单一精密浮动。 (基本是指卫队班级面积的定义)

我们的三角关系只是比观察点更大的因素3,因此,我们可以确信,根本不需要放弃。

www.un.org/Depts/DGACM/index_spanish.htm 但它是否值得?

很糟的是,碎片灰色燃烧产生的节余是实际的(特别是当你有复杂的碎块时),但总体影响在现实世界情况下可能难以衡量。 另一方面,这一方法并不比使用完全筛选的四分之一更为复杂,而是使用无数据<>,即使可能不会产生巨大差异,它还是赢得了一定伤害,因此,不是<>>>。

www.un.org/Depts/DGACM/index_spanish.htm 这种方法是否可用于所有类型的轴向调整的试金,而不仅仅是完全筛选的试金?

从理论上讲,你可以把这种限制与采集某些武断的轴向体的试相结合(而分辨率测试将非常有效,因为仅仅限制碎片是首先生产的,它就是一种真正的“测试”,在HW中消除了碎片。 然而,这要求你改变你想要提取的每个试金星的分辨率参数,这意味着国家的许多变化,把你限制在每条电话的单条直径上,因此,在大多数情况下,这只是一个好的想法。

无需使用地貌测量仪、甚低分辨率分辨率仪或根本没有任何记忆。

透镜可以产生 qua。

layout(location = 0) out vec2 uv;

void main() 
{
    float x = float(((uint(gl_VertexID) + 2u) / 3u)%2u); 
    float y = float(((uint(gl_VertexID) + 1u) / 3u)%2u); 

    gl_Position = vec4(-1.0f + x*2.0f, -1.0f+y*2.0f, 0.0f, 1.0f);
    uv = vec2(x, y);
}

Bind 空洞的VAO。 发出6个闪电灯。

a. 用于生产整块块地貌测量层:

#version 330 core

layout(points) in;
layout(triangle_strip, max_vertices = 4) out;

out vec2 texcoord;

void main() 
{
    gl_Position = vec4( 1.0, 1.0, 0.5, 1.0 );
    texcoord = vec2( 1.0, 1.0 );
    EmitVertex();

    gl_Position = vec4(-1.0, 1.0, 0.5, 1.0 );
    texcoord = vec2( 0.0, 1.0 ); 
    EmitVertex();

    gl_Position = vec4( 1.0,-1.0, 0.5, 1.0 );
    texcoord = vec2( 1.0, 0.0 ); 
    EmitVertex();

    gl_Position = vec4(-1.0,-1.0, 0.5, 1.0 );
    texcoord = vec2( 0.0, 0.0 ); 
    EmitVertex();

    EndPrimitive(); 
}

Vertex shader只是空洞的:

#version 330 core

void main()
{
}

利用这种sha子,你可以用空洞的VBO进行 du调:

glDrawArrays(GL_POINTS, 0, 1);

这与demanze的答复相似,但我认为更容易理解。 此外,只有利用TRIANGLE_STRIP,利用4个vert。

#version 300 es
out vec2 textureCoords;

void main() {
    const vec2 positions[4] = vec2[](
        vec2(-1, -1),
        vec2(+1, -1),
        vec2(-1, +1),
        vec2(+1, +1)
    );
    const vec2 coords[4] = vec2[](
        vec2(0, 0),
        vec2(1, 0),
        vec2(0, 1),
        vec2(1, 1)
    );

    textureCoords = coords[gl_VertexID];
    gl_Position = vec4(positions[gl_VertexID], 0.0, 1.0);
}

下面是将造船带入经调整的舱的舱位。

Gl.glUseProgram(shad);      

Gl.glBindBuffer(Gl.GL_ARRAY_BUFFER, vbo);           
Gl.glEnableVertexAttribArray(0);
Gl.glEnableVertexAttribArray(1);
Gl.glVertexAttribPointer(0, 3, Gl.GL_FLOAT, Gl.GL_FALSE, 0, voff);
Gl.glVertexAttribPointer(1, 2, Gl.GL_FLOAT, Gl.GL_FALSE, 0, coff);  

Gl.glActiveTexture(Gl.GL_TEXTURE0);
Gl.glBindTexture(Gl.GL_TEXTURE_2D, fboc);
Gl.glUniform1i(tileLoc, 0);

Gl.glDrawArrays(Gl.GL_QUADS, 0, 4);

Gl.glBindTexture(Gl.GL_TEXTURE_2D, 0);
Gl.glBindBuffer(Gl.GL_ARRAY_BUFFER, 0); 

Gl.glUseProgram(0); 

实际数量和编码来自:

private float[] v=new float[]{  -1.0f, -1.0f, 0.0f,
                                1.0f, -1.0f, 0.0f,
                                1.0f, 1.0f, 0.0f,
                                -1.0f, 1.0f, 0.0f,

                                0.0f, 0.0f,
                                1.0f, 0.0f,
                                1.0f, 1.0f,
                                0.0f, 1.0f
};

船只的约束力和构成留给你。

The vertex shader:

#version 330

layout(location = 0) in vec3 pos;
layout(location = 1) in vec2 coord;

out vec2 coords;

void main() {
    coords=coord.st;
    gl_Position=vec4(pos, 1.0);
}

由于该职位是原始的,也就是说,不乘以任何矩阵,将第1、第1、第1、第1、第1、第4、第3、第3、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第12、第16、第12、第12、第12、第12、第16、第12、第12、第12、第12、第16、第12、第12、第12、第12、第12、第16、第15、第15、第12、第16、第12、第12、第12、第16、第15、第15、第16、第15、第15、第15、第15、第12、第15、第15、第15、第15、第15、第15、第15、第12、第15、第15、第15、第15、第15、第15、第15、第15、第15、第15、第15、第15、第15、 看看Alfonse s tutorial把他的任何职位都关在开放的GL.org上。





相关问题
OpenGL 3D Selection

I am trying to create a 3D robot that should perform certain actions when certain body parts are clicked. I have successfully (sort of) implemented picking in that if you click on any x-plane part, it ...

CVDisplayLink instead of NSTimer

I have started to implement cvDisplayLink to drive the render loop instead of nstimer, as detailed in this technical note https://developer.apple.com/library/archive/qa/qa1385/_index.html Is it ...

Can the iPhone simulator handle PVR textures?

I have a really weird problem with PVR textures on the iPhone simulator- the framerate falls through the floor on the iPhone simulator, but on the iPhone itself it works just fine. Has anyone had any ...

Calculate fps (frames per second) for iphone app

I am using an opengl es iphone application. What is the most accurate way to calculate the frames per second of my application for performance tuning?

Java - Zoom / 3D Data Visualization Libraries

What are the best libraries/frameworks for doing 3D and/or Zoom interfaces in Java? I d like to be able to do some prototyping of creating new types of interfaces for navigating within data and ...

FLTK in Cygwin using Eclipse (Linking errors)

I have this assignment due that requires the usage of FLTK. The code is given to us and it should compile straight off of the bat, but I am having linking errors and do not know which other libraries ...