OpenGL communityФорумУроки по OpenGL

Урок 2 - Рисуем первый треугольник (комментарии) (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
18:46, 20 янв 2011

Я понимаю, что бессмыслица (плоскость отсечения за спиной наблюдателя), однако при zNear <= 0 получаю отсечение.

#31
20:38, 20 янв 2011

DimaO
> f := 1/Tan(fovy*Pi/(360));

  f := 1/Tan(fovy*(Pi/360));
?

#32
21:06, 20 янв 2011

Executor
Ой, точно. Но это результат не меняет, впрочем.

#33
22:37, 20 янв 2011

Погадаю. :) Может матрицу надо транспонировать?

#34
0:09, 21 янв 2011

DimaO
> Я понимаю, что бессмыслица (плоскость отсечения за спиной наблюдателя), однако при zNear <= 0 получаю отсечение.
И о чем нам это говорит? :)

#35
16:24, 22 янв 2011

Все, разобрался, спасибо. С матрицами все в порядке. Отображается корректно, только немножко не влезает в Viewport. Но это уже не в матрицах дело.

#36
15:56, 24 янв 2011

Нубские вопросы, я как понимаю glxext.h - Linux, wglext.h - Windows, glex.h - объединение glxext.h и wglext.h? И еще какой реализации соответствует glext.h на официальном сайте opengl, 4.1? Т.е. glext.h поддерживает 2.0?

#37
19:36, 24 янв 2011

registr
> я как понимаю glxext.h - Linux, wglext.h - Windows, glex.h - объединение glxext.h и wglext.h?

Нет.
glext.h это расширения, которые не привязаны к какой либо платформе, то бишь мультиплатформенные.

> И еще какой реализации соответствует glext.h на официальном сайте opengl, 4.1?

Да.

> Т.е. glext.h поддерживает 2.0?

Да.

#38
21:55, 24 янв 2011

Executor
> Нет.
Уж очень похоже glxext на GLX,  wglext на WGL

#39
2:50, 19 мар 2011

Странно, но всё работает даже так:

glUniformMatrix4fv(projectionMatrixLocation, 0, 0, mvpMatrix.getArray());
#40
11:33, 20 мар 2011

registr
> Уж очень похоже glxext на GLX, wglext на WGL

Я "нет" сказал только на вопрос. Первую часть ты правильно сказал. Я только про объединение ответил нет.

Pixar
А что должно не работать?

#41
20:50, 20 мар 2011

Executor
> А что должно не работать?
А у меня везде матрицы транспонированные передаются в уроках, потому что хранятся как row-major, для удобства. А у него тут не транспонируются. А то что все "работает и так" это заблуждение, либо порядок умножения в шейдере поменян, ибо матрицы хранятся сразу как column-major. Вобщем чудес не бывает :)

#42
22:57, 21 мар 2011

KpeHDeJIb
> порядок умножения в шейдере поменян
В шейдере всё нормально. Просто любое изменение одной из матриц Model, View, Projection, в данном случае, сказывается так, что в шейдер отправляется вся эта перемноженная компания. С параметрами glUniformMatrix4fv() я игрался в инициализирующем коде. Мои издевательства над функцией (вроде передачи параметров 100500 или -100500), оказывается, приводили к выводу ошибки в логе, но я об этом даже не думал, так как все матрицы целиком грузились в методе draw(), и картинка появлялась без искажений. Когда я убрал транспонирование в самом методе draw(), то получился интересный эффект, как будто объект спроецировался на поверхность шара :)

#43
11:13, 3 апр 2011

Вопрос, может быть, некорректный, но ошибка уже достает. Упаковал работу с шейдерами в класс. Есть private поле FShaderProgram, содержащее индекс шейдерной программы. В вершинном шейдере есть два in атрибута "vertexposition" и "vertextexcoord" позиции и текстурной координаты соответственно. VBO общий для всех атрибутов. Теперь проблема:

PositionLocaion := glGetAttribLocation(FShaderProgram,'vertexposition');
if PositionLocaion <> -1 then
begin
  glVertexAttribPointer(PositionLocaion,2,GL_FLOAT,false,4*SizeOf(GLfloat),pointer(0));
  glEnableVertexAttribArray(PositionLocaion);
end else ProgramLogFile.AddEntry('Can''t get "vertexposition" attribute');

этот код возвращает PositionLocation = 0, то есть верный результат. Следом

TexCoordsLocation := glGetAttribLocation(FShaderProgram,'vertextexcoords');
if TexCoordsLocation <> -1 then
begin
  glVertexAttribPointer(TexCoordsLocation,2,GL_FLOAT,false,4*SizeOf(GLfloat),pointer(2*SizeOf(GLfloat)));
  glEnableVertexAttribArray(TexCoordsLocation);
end else ProgramLogFile.AddEntry('Can''t get "vertextexcoords" attribute');

Этот код возвращает TexCoordsLocation = -1, то есть провал.
Собственно, шейдер

#version 330 core

in vec2 vertexposition;
in vec2 vertextexcoords;

out vec2 fragTexCoords;

void main(void)
{
  gl_Position = vec4(vertexposition,0.0,1.0);
  fragTexCoords = vertextexcoords;
}

Потери индекса скомпонованной шейдерной программы нет, имена атрибутов с gl_ не начинаются, имена атрибутов скопированы с шейдера. Так что же еще может быть причиной отказа вывода индекса атрибута? Без применения класса пример работает.

#44
11:41, 3 апр 2011

А fragTexCoords в фрагментном шейдере юзается вообще? Если нет, то компилятор просто выкинул его за ненадобностью.
А вообще я бы не рекомендовал городить такой огород. Куда проще сделать так:

glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(0,2,GL_FLOAT,false,4*SizeOf(GLfloat),pointer(0));
glVertexAttribPointer(1,2,GL_FLOAT,false,4*SizeOf(GLfloat),pointer(2*SizeOf(GLfloat)));
#version 330 core

layout(location = 0) in vec2 vertexposition;
layout(location = 1) in vec2 vertextexcoords;

out vec2 fragTexCoords;

void main(void)
{
  gl_Position = vec4(vertexposition,0.0,1.0);
  fragTexCoords = vertextexcoords;
}
Страницы: 1 2 3 4 5 Следующая »
OpenGL communityФорумУроки по OpenGL

Тема в архиве.