小编use*_*940的帖子

IBO比GL_TRIANGLE_STRIP差吗?

出于学习目的,我决定使用3种方法绘制球体

  1. 显示列表
  2. Voa Vbo(GL_TRIANGLE_STRIPE)
  3. Vao Vbo和Ibo(GL_TRIANGLES)

我读到使用ibo让程序运行得更快,但这是真的吗?对于100个切片和100个堆栈的球体,第二个方法产生40400个顶点,而第三个"仅"19802.通过这样做,我保存20598个每个32字节= 659136个字节.

  1. verticesSize =(切片*4)*(堆叠+ 1);

  2. IBO verticesSize =(slices*2)*(stacks-1)+2;

但是我需要创建索引数组,在这种情况下,大小为118800(创建所有面所需的索引数)*4(unsigned int的大小)= 475200字节!虽然第二种方法使用15fps渲染1000个球体,但第三种方法使用仅仅6pfs渲染1000个球体

  1. 将指数数组从GL_TRIANGLES转换为GL_TRIANGLE_STRIP会提供更有效的方法,然后第二种方法吗?
  2. 使用ibo渲染球体是不是很糟糕?
  3. 为什么它更慢?indices数组中的顺序是否有任何问题?

或许我写的代码完全错了,为什么它如此挣扎:(如果有人有兴趣,这里是我的代码http://pastebin.com/raw.php?i=74jLKV5M

c++ opengl

6
推荐指数
1
解决办法
352
查看次数

将纹理传递给着色器

我一直在尝试找出如何将纹理发送到着色器,但是我无法弄清楚。我的代码对我来说不错,但我的第二个纹理是黑色。

void setShaders() {

    glEnable (GL_TEXTURE_2D);
    v2 = glCreateShader(GL_VERTEX_SHADER);
    f2 = glCreateShader(GL_FRAGMENT_SHADER);    


    load_shader(v2,"a.vert");
    load_shader(f2,"a.frag");

    glCompileShader(v2);
    glCompileShader(f2);

    p = glCreateProgram();

    glAttachShader(p,v2);
    glAttachShader(p,f2);

    GLubyte* textura=LoadImageToTexture("d.jpg");
    GLubyte* textura2=LoadImageToTexture("n.jpg");

    GLuint texturaID[2];
    glGenTextures(2, texturaID);

    glBindTexture(GL_TEXTURE_2D, texturaID[0]);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA, w, h, 0, GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)textura );


    glBindTexture(GL_TEXTURE_2D, texturaID[1]);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexImage2D(GL_TEXTURE_2D,1,GL_RGBA, w, h, 0, GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)textura2 );


    glLinkProgram(p);
    glUseProgram(p);
    GLint baseImageLoc = glGetUniformLocation(p, "tex");
    GLint normImage = glGetUniformLocation(p, "norm");
    glUniform1i(baseImageLoc, 0);
    glUniform1i(normImage, 1);

    glActiveTexture(GL_TEXTURE0 + 0);
    glBindTexture(GL_TEXTURE_2D, texturaID[0]);

    glActiveTexture(GL_TEXTURE0 + 1);
    glBindTexture(GL_TEXTURE_2D, texturaID[1]);

}
Run Code Online (Sandbox Code Playgroud)

着色器[顶点]

void …
Run Code Online (Sandbox Code Playgroud)

opengl glsl

5
推荐指数
1
解决办法
1万
查看次数

缺少访问控制允许凭据

我正在尝试从站点对 Azure 中托管的 MVC 5 应用程序运行 ajax 调用。\n 但是该调用必须特定的“withCredentials”参数。

\n\n
 xhrFields: {\n    withCredentials: true\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n

在特定该参数之后,浏览器返回错误 \'(预计 CORS 标头 \xe2\x80\x9eAccess-Control-Allow-Credentials\xe2\x80\x9d\ 中 \xe2\x80\x9etrue\xe2\x80\x9d\'

\n\n

为了克服这个问题,我在 Web.config 中添加了自定义标头。但 Azure 以某种方式删除了它们期望的 Test2 标头,该标头出现在响应中。

\n\n

我的网络配置

\n\n
<system.webServer>\n  <validation validateIntegratedModeConfiguration="false" />\n  <httpProtocol>\n    <customHeaders>\n      <add name="Test2" value="justTest" />\n      <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />\n      <add name="Access-Control-Allow-Credentials" value="true" />\n      <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />\n    </customHeaders>\n  </httpProtocol>\n    <handlers>\n      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />\n      <remove name="OPTIONSVerbHandler" />\n      <remove name="TRACEVerbHandler" />\n      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />\n    </handlers>\n  </system.webServer></configuration>\n …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc azure cors asp.net-mvc-5

5
推荐指数
0
解决办法
7892
查看次数

为什么instanced数组比glDrawElement慢?

在我的程序中,我想绘制许多领域.首先我创建顶点,球体的索引然后将它们绑定到voa/vbo/ibo.之后我创建了1000个随机模型矩阵.现在我有两种绘制网格的方法.

  1. 只需通过ModelMatrices调用列表循环1000次glDrawElements.矩阵MVP在CPU上计算并发送到着色器,如统一.
  2. 将所有矩阵绑定到其他VBO并将它们发送到着色器,如"in"变量.然后打电话一次glDrawElementsInstanced.

在测试程序中我画了1000个球体(大约20milions顶点)当我使用第一种方法时我得到27FPS而第二次降低性能到19FPS.理论上第二种方法应该达到比第一种更好的性能.

这是代码.

我认为瓶颈是顶点着色器中的这种乘法(VP * ModelMatrix),因为它需要为每个(网格中的顶点)*1000完成.

什么可以升级,我做错了什么?

c++ opengl glsl

4
推荐指数
2
解决办法
1708
查看次数

SSE比常规功能慢得多

我正在使用SSE设置Julia设置可视化.这是我的代码类和运算符

class vec4 {
    public:
        inline vec4(void) {}
        inline vec4(__m128 val) :v(val) {}

        __m128 v;

        inline void operator=(float *a) {v=_mm_load_ps(a);}
        inline vec4(float *a) {(*this)=a;} 
        inline vec4(float a) {(*this)=a;}

        inline void operator=(float a) {v=_mm_load1_ps(&a);}

};

inline vec4 operator+(const vec4 &a,const vec4 &b) { return _mm_add_ps(a.v,b.v); }
inline vec4 operator-(const vec4 &a,const vec4 &b) { return _mm_sub_ps(a.v,b.v); }
inline vec4 operator*(const vec4 &a,const vec4 &b) { return _mm_mul_ps(a.v,b.v); }
inline vec4 operator/(const vec4 &a,const vec4 &b) { return _mm_div_ps(a.v,b.v); }
inline vec4 …
Run Code Online (Sandbox Code Playgroud)

c++ sse visual-studio-2010 windows-forms-designer

3
推荐指数
1
解决办法
2537
查看次数

对数深度缓冲线性化

如何线性化对数深度缓冲区?

片段着色器中线性深度缓冲区的可视化

  float n = 1.0; // camera z near
  float f = 27000000.0; // camera z far
  float z = texture( DepthTex, TexCoord ).x;
  float d = (2.0 * n) / (f + n - z * (f - n));
  FragColor=vec4(d,d,d,1);
Run Code Online (Sandbox Code Playgroud)

球体顶点着色器

vec4 ClipCoords(vec3 position,mat4 matrix)
{
   vec4 clip = matrix * vec4(position,1.0f);
   clip.z =((2.0f * log(1.0f * clip.z + 1.0f) / log(1.0f * 27000000.0f + 1.0f)) - 1.0f) * clip.w;
   return clip;
}
 gl_Position = ClipCoords(position,matrix);
Run Code Online (Sandbox Code Playgroud)

左侧显示了对数深度缓冲线性或者更确切地说,它的缺乏,而右边显示linarization不log …

opengl zbuffer

3
推荐指数
1
解决办法
3213
查看次数

值是 a 和 b 的类型

对于给定的数据库

Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Run Code Online (Sandbox Code Playgroud)

问题是: 在 RAM 最低的 PC 中,找到生产 RAM 最低的 PC 和处理器速度最高的 PC 的打印机制造商。结果集:制造商。

让我们拆分查询!

  • 查找同时生产 PC 的打印机制造商

SELECT DISTINCT maker from product Group By maker,type HAVING type IN('Printer','PC')

我认为这是错误的,因为 IN('Printer','PC') 就像 OR not AND

  • 具有最低 RAM 的 PC

SELECT model,speed FROM pc WHERE ram=(SELECT MIN(ram) FROM pc) as minimumRam

  • 具有最低 RAM 的 PC 中速度最高的处理器
WHERE
lowestRam.speed=(SELECT MAX(speed) FROM pc WHERE ram=(SELECT MIN(ram) FROM pc))
Run Code Online (Sandbox Code Playgroud)

查询本身!

SELECT DISTINCT maker FROM
(SELECT …
Run Code Online (Sandbox Code Playgroud)

sql

2
推荐指数
1
解决办法
1749
查看次数

vbo显示相同的对象

在我的项目中,我想使用vbo显示许多对象(球体).我设法显示1个没有问题的对象,但是当涉及到2个或更多时,所有对象(vbos)都被最后定义的对象(vbo)替换.

CosmicBody(int x)
{
    this->verticesSize=0;
    //this->VaoId=x;
            //this->VaoId=1;
    this->VboId=x;
};

void CosmicBody::InitShape(unsigned int uiStacks, unsigned int uiSlices, float fA, float fB, float fC)
{
float tStep = (Pi) / (float)uiSlices;
float sStep = (Pi) / (float)uiStacks;

float SlicesCount=(Pi+0.0001)/tStep;
float StackCount=(2*Pi+0.0001)/sStep;
this->verticesSize=((int) (SlicesCount+1) * (int) (StackCount+1))*2;

glm::vec4 *vertices=NULL;
vertices=new glm::vec4[verticesSize];
int count=0;


for(float t = -Pi/2; t <= (Pi/2)+.0001; t += tStep)
{
    for(float s = -Pi; s <= Pi+.0001; s += sStep)
    {
        vertices[count++]=glm::vec4(fA * cos(t) * cos(s),fB * cos(t) * …
Run Code Online (Sandbox Code Playgroud)

c++ opengl vbo

1
推荐指数
1
解决办法
174
查看次数

相当于emgu中的层次结构

我正在将Python OpenCV代码转换为Emgu.在Python中,函数findContours可以返回hierarchy

hierarchy - 可选输出向量,包含有关图像拓扑的信息.它具有与轮廓数量一样多的元素.对于每个第i个轮廓轮廓[i],元素层次[i] [0],层次[i] [1],层次[i] [2]和层次[i] [3]被设置为0-基于相同等级的下一轮和前轮廓的轮廓,第一轮廓和父轮廓的基础索引.如果轮廓i没有下一个,前一个,父级或嵌套轮廓,则层次结构[i]的相应元素将为负数.

不幸的是在Emgu我不能不为findContours函数返回这样的数组.这有什么相同的吗?

opencv image-processing emgucv

0
推荐指数
1
解决办法
1652
查看次数

在哪里分配一次使用类?

让我们考虑以下代码:

void main(int argc, char* argv[])
{
Foo foo;
//at this point I don't need foo any more
//a lot of stuff here
}
Run Code Online (Sandbox Code Playgroud)

如果我只需要foo很短的时间,那么在执行其余代码之前将它分配到堆上并删除是不是更好?

c++ memory-management

0
推荐指数
1
解决办法
74
查看次数