Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ускорение рендера (http://www.flasher.ru/forum/showthread.php?t=129068)

Venya2007 24.08.2009 12:20

Ускорение рендера
 
Здравствуйте. Подскажите как можно увеличить производительность рендера. У меня вывод на экран построен так:

Код AS3:

        public function render_Quad(ref_quad:V_Quad):void{
                        if (ref_quad!=null){
                                vertices[0]= ref_quad.x1;vertices[1]= ref_quad.y1
                                vertices[2]= ref_quad.x2;vertices[3]= ref_quad.y2
                                vertices[4]= ref_quad.x3;vertices[5]= ref_quad.y3
                                vertices[6]= ref_quad.x4;vertices[7]= ref_quad.y4
 
                                tex_coords[0]=ref_quad.tx1;tex_coords[1]=ref_quad.ty1
                                tex_coords[2]=ref_quad.tx2;tex_coords[3]=ref_quad.ty2
                                tex_coords[4]=ref_quad.tx3;tex_coords[5]=ref_quad.ty3
                                tex_coords[6]=ref_quad.tx4;tex_coords[7]=ref_quad.ty4
 
 
                                draw_display.graphics.beginBitmapFill(ref_quad.tex)
                                draw_display.graphics.drawTriangles(vertices,indices,tex_coords)
                                draw_display.graphics.endFill()
                        }
                }
 
              public function render_beginScene(color:uint):void{
                        draw_display.graphics.clear()
                        draw_display.graphics.beginFill(color)
                        draw_display.graphics.drawRect(0,0,d_w,d_h)
                        draw_display.graphics.endFill()       
                }
 
                public function render_endScene():void{
                        if (!display2.visible){
                                display2.visible=true
                                display.visible=false;
                                draw_display=display
                        }else{
                                display.visible=true
                                display2.visible=false;
                                draw_display=display2
                        }
                }

Все отлично работает, когда обьектов мало. Еще заметил, когда рисовать без текстуры, тоесть вместо beginBitmapFill заливать просто цветом beginFill, тогда также заметно быстрее работает. Интересно как в 3Д движках умудряются рисовать больше 3000 полигонов при приличной производительности. У меня же при 100 обьектах(200 триугольников), уже притормаживает. :(

wvxvw 24.08.2009 13:10

1. вы не очищаете graphics когда рисуете треугольники.
2. от того, что вы будете писать код слитно и все в одну строчку, работать он быстрее точно не станет :)
3. возможно, что drawTriangles не самый быстрый метод, возможно проблема вообще в другом месте.
Ну и кроме того - сравнение с null в AS3 имеет смысл только для переменных с типом * - для всего остального нужно просто использовать if (myVar)

Venya2007 24.08.2009 13:20

wvxvw спасибо за ответ.

1. вы не очищаете graphics когда рисуете треугольники.
render_Quad вызывается между render_beginScene и render_endScene
2. от того, что вы будете писать код слитно и все в одну строчку, работать он быстрее точно не станет где вы видели все в одну строчку:)
3. возможно, что drawTriangles не самый быстрый метод, возможно проблема вообще в другом месте. каким способом можно быстрее нарисовать?
Ну и кроме того - сравнение с null в AS3 имеет смысл только для переменных с типом * - для всего остального нужно просто использовать if (myVar) спасибо за совет


Часовой пояс GMT +4, время: 19:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.