{{notification.text}}

MirGames

DIN
04.02.09 18:06
0
Испоьзуя glPopMatriix и glPushMatrix можно ли делать несколько копий и вызывать их в нужное время?
Код

...
glPushMatrix(1);
...
glPushMatrix(2);
...
...
glPopMatrix(2);
...
glPopMatrix(1);
...
glPopMatrix(2);
...


вот так например.

ну или подскажите как вручную скопировать нужную матрицу и залить её обратно.
Отредактировано: 04.02.09 18:15
#1
аксакал
04.02.09 21:53
0
1) Нет нельзя.
2) glGetFloatv(GL_MODELVIEW, @m) ... glLoadMatrixf(@m)
где m: array [0..15] of Single или что-то типа того.
Отредактировано: 04.02.09 21:56
#2
04.02.09 22:25
0
DIN чисто теоретически....там же стек большой на 3матрицы я думаю у всех есть...просто надо следить за поярдком
#3
аксакал
04.02.09 23:28
0
lans
Чисто теоретически... ты в вопрос не въехал.
Отредактировано: 04.02.09 23:28
#4
DIN
04.02.09 23:52
0
Цитата(XProger @ 4.02.2009 - 21:53) [snapback]92571[/snapback]

1) Нет нельзя.
2) glGetFloatv(GL_MODELVIEW, @m) ... glLoadMatrixf(@m)
где m: array [0..15] of Single или что-то типа того.


Спасибо, направление понял. так и свою процедурку не проблема написать, вопрос только в быстродействии....
#5
DIN
05.02.09 00:53
0
Цитата(XProger @ 4.02.2009 - 21:53) [snapback]92571[/snapback]

1) Нет нельзя.
2) glGetFloatv(GL_MODELVIEW, @m) ... glLoadMatrixf(@m)
где m: array [0..15] of Single или что-то типа того.

А перед glLoadMatrixf(@m) надо указы вать какую матрицу меняем? (glMatrixMode( GL_... ) ; )
Отредактировано: 05.02.09 01:07
#6
аксакал
05.02.09 01:59
0
DIN
Надо
#7
DIN
05.02.09 12:02
0
написал процедуры загрузки/сохранения матриц:
Код

Type
    OGL_Matrix=array[0..15] of single;
VAR
{}OGL_ModelVievMatrixes:array[1..OGL_SizeOfModelVievMatrixes] of OGL_Matrix;
{}OGL_ModelVievReserved:Array[1..OGL_SizeOfModelVievMatrixes] of Boolean;
...
{}[b]procedure[/b] glSaveMVMatrixP(N:integer);//сохранить в позиции N
{} [b]begin[/b]
{} glGetFloatv(GL_MODELVIEW, @OGL_ModelVievMatrixes[N]);
{} OGL_ModelVievReserved[n]:=true;
{} [b]end;[/b]



{}[b]function[/b] glSaveMVMatrix:integer;//найти свободное место и записать туда
{} [b]var[/b] i,N:integer;
{} [b]begin[/b]
{} N:=0;
{} for i:=1 to OGL_SizeOfModelVievMatrixes do
{}  if not OGL_ModelVievReserved[i] then
{}   begin
{}   glGetFloatv(GL_MODELVIEW, @OGL_ModelVievMatrixes[i]);
{}   OGL_ModelVievReserved[i]:=true;
{}   N:=i;
{}   break;
{}   end;
{} glSaveMVMatrix:=N;
{} [b]end;[/b]



{}[b]procedure[/b] glLoadMVMatrix(N:integer;Free:boolean);//считать с позиции N и ответ на вопрос "разрешить изменение записи?"
{} [b]begin[/b]
{} glMatrixMode( GL_MODELVIEW );
{} glLoadMatrixf(@OGL_ModelVievMatrixes[N]);
{} OGL_ModelVievReserved[N]:=not free;
{} [b]end;[/b]



вроде верно... но чёт не хочит даже в простом варианте работать (1я и 3я пр-ры).
вызов идёт так:
Код

glMatrixMode( GL_MODELVIEW );
glLoadidentity;
gluPerspective(6,1.18,-1,-150);
  gluLookAt(0,0,0,
            0,0,1,
            0,1,0);
  glRotatef(g.AngleX,1,0,0);
  glRotatef(g.AngleY,0,1,0);
  glTranslatef(-g.Position.x,-g.Position.Y,-g.Position.Z);
...
...
glSaveMVMatrixP(1);
...
glLoadMVMatrix(1,true);
...


Если у кого есь замечания подскажите.
после glLoadMVMatrix не отображается вообще ничего, что я напутал?
#8
05.02.09 19:32
0
DIN круто....свой стек сделал)))

gluPerspective(6,1.18,-1,-150); - это матрица проиэцирования)))если только ты там не с текстурами работаешь)))
Отредактировано: 05.02.09 19:38
#9
DIN
05.02.09 19:52
0
Цитата(lans @ 5.02.2009 - 19:32) [snapback]92631[/snapback]

gluPerspective(6,1.18,-1,-150); - это матрица проиэцирования)))если только ты там не с текстурами работаешь)))

Я чёт напутал? :blink: Во втором коде я указал как ети процедуры используются, и после чего.

lans
Чесно говоря не понял к чему первая часть сообщения. Если есть замечание - напиши.

#10
DIN
06.02.09 01:31
0
Я нашол ошибку - GL_MODELVIEV_MATRIX а не GL_MODELVIEV <_<
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}