Вообщем делал я прогу тут на форуме поворота 3д квадрата теперь я её расширел и всё мирцает что и понятно =) Слышал есть двойная буферация которая это устраняет , но не знаю что она из себя представляет =( Или другие способы!
Lapp
27.09.2006 3:34
Цитата(XaMMaX @ 26.09.2006 18:55)
Вообщем делал я прогу тут на форуме поворота 3д квадрата теперь я её расширел и всё мирцает что и понятно =) Слышал есть двойная буферация которая это устраняет , но не знаю что она из себя представляет =( Или другие способы!
Может, ты имеешь в виду переключение графических страниц? Рисуешь сначала в неактивную страницу, потом переключаешь страницы, делаешь изменения на неактивной, снова переключаешь..
мисс_граффити
27.09.2006 3:34
Делфи? Если да, то: 1)
Код
DoubleBuffered:=true
2) меняешь свойство формы AlphaBlend на true тоже иногда помогает.
procedure calc(var x,y,z,xt,yt,zt,xan,yan,zan:real); begin Yt:= Y * COS(Xan) - Z * SIN(Xan); Zt:= Y * SIN(Xan) + Z * COS(Xan); Y:= Yt; Z:= Zt; Xt:= X * COS(Yan) - Z * SIN(Xan); Zt:= X * SIN(Yan) + Z * COS(Xan); X:= Xt; Z:= Zt; Xt:= X * COS(Zan) - Y * SIN(Zan); Yt:= X * SIN(Zan) + Y * COS(Zan); X:= Xt; Y:= Yt;
end;
var gd,gm,i,i1,i2:integer; modelx4,modely4,modelz4,modelx1,modely1,modelz1,modelx2,modely2,modelz2,modelx3, modely3,modelz3:array[1..max] of real; xan,yan,zan:real; yt,xt,zt:real; sx1,sx2,sx3,sx4,sy1,sy2,sy3,sy4,sz1,sz2,sz3,sz4:integer; arr: array[1 .. 8] of integer; modelfile:text; path:string; zoom:integer; colorbuf:integer; color:array[1..max] of integer; buf1,buf2,buf3,buf4:real; sum1,sum2:real; j1,j2,j3,j4,j1a,j2a,j3a,j4a:real; page:integer;
begin writeln('Hello I am 3d engine =)'); writeln('Select model:'); readln(path); writeln('Let the party begin!'); readln; gd:=detect;initgraph(gd,gm,'C:\bp\bgi');
for i1:=1 to i do begin readln(modelfile,color[i1],modelx1[i1],modely1[i1],modelz1[i1],modelx2[i1],model y2[i1],modelz2[i1], modelx3[i1],modely3[i1],modelz3[i1],modelx4[i1],modely4[i1],modelz4[i1]); end;
page:=1;
repeat
setcolor(white); for i1:=1 to i do begin calc(modelx1[i1],modely1[i1],modelz1[i1],xt,yt,zt,xan,yan,zan); calc(modelx2[i1],modely2[i1],modelz2[i1],xt,yt,zt,xan,yan,zan); calc(modelx3[i1],modely3[i1],modelz3[i1],xt,yt,zt,xan,yan,zan); calc(modelx4[i1],modely4[i1],modelz4[i1],xt,yt,zt,xan,yan,zan); end;
for i1:=1 to i-1 do for i2:=1 to i-1 do begin sum1:=modelz1[i1]+modelz2[i1]+modelz3[i1]+modelz4[i1]; sum2:=modelz1[i1+1]+modelz2[i1+1]+modelz3[i1+1]+modelz4[i1+1]; if sum1<sum2 then begin buf1:=modelz1[i1+1]; buf2:=modelz2[i1+1]; buf3:=modelz3[i1+1]; buf4:=modelz4[i1+1]; modelz1[i1+1]:=modelz1[i1]; modelz2[i1+1]:=modelz2[i1]; modelz3[i1+1]:=modelz3[i1]; modelz4[i1+1]:=modelz4[i1]; modelz1[i1]:=buf1; modelz2[i1]:=buf2; modelz3[i1]:=buf3; modelz4[i1]:=buf4;
setactivepage(page); <-- вот тут я это и делаю if page=1 then page:=2 else page:=1; setvisualpage(page);
for i1:=2 to i do begin sx1:=round(zoom*modelx1[i1])+320; sy1:=round(zoom*modely1[i1])+240; sx2:=round(zoom*modelx2[i1])+320; sy2:=round(zoom*modely2[i1])+240; sx3:=round(zoom*modelx3[i1])+320; sy3:=round(zoom*modely3[i1])+240; sx4:=round(zoom*modelx4[i1])+320; sy4:=round(zoom*modely4[i1])+240; line(sx1,sy1,sx2,sy2); line(sx2,sy2,sx3,sy3); line(sx3,sy3,sx4,sy4); line(sx4,sy4,sx1,sy1); arr[1]:=sx1; arr[2]:=sy1; arr[3]:=sx2; arr[4]:=sy2; arr[5]:=sx3; arr[6]:=sy3; arr[7]:=sx4; arr[8]:=sy4; setfillstyle(1,color[i1]); fillpoly(4,arr); end;
delay(15000); cleardevice;
until keypressed; closegraph; end.
Нуждаюсь в помощи =)
volvo
27.09.2006 23:38
Файл данных где?
XaMMaX
27.09.2006 23:48
Да совсем забыл вот он =)
volvo
28.09.2006 0:07
Цитата
интерестно почему не работает =(
Во-первых, потому, что у режима VGAHi 640*480, который наверняка у тебя устанавливается, просто НЕТ нескольких видеостраниц... Так что, придется делать:
Да спасибо это уже намного лучше, но уменя по прежнему мерцания =( хоть и не такие ужасные как были может у меня комп такой? volvo, какие твои результаты? Совершенно нет мерцания?
volvo
28.09.2006 1:14
Почему же нету... Есть немного
Я вот хочу попробовать обойтись вообще без переключения страниц, немного перестроив программу. Попробую - отпишусь...
XaMMaX
28.09.2006 1:17
Буду ооооочень признателен!
XaMMaX
28.09.2006 19:08
Volvo, расскажи как ты хочеш престроить программу? Теоритически.
volvo
28.09.2006 23:26
Теоретически - это не ко мне. Я не теоретик. И до тех пор, пока работающий результат не получен я ничего не выкладываю. Пока не получается полностью избавиться от мерцания, как получится (и если получится) - выложу...
XaMMaX
28.09.2006 23:41
Ну ладно жду =) Ну и если не получится ты всё равно отпишись!
Coder_perm
29.09.2006 11:20
Я избавился от мерцания рисованием в буфер, тоесть не в видео память, а в свой массив. А потом готовый массив копировал целиком в видео память, без стирания. Этот способ сложен тем, что необходимо писать свои функции рисования полигонов, а не пользоваться стандартным graph.tpu.
XaMMaX
1.10.2006 1:06
Не Это для меня сложно =( Надо чего попроще!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.