GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (57 стр.)

Сообщения на форуме пользователя Andrey (57 стр.)

Terrain demo, LODs1 фев. 201023:52#52
ud1
Скачал наконец. 12 мс 8600 GT. Лаги на локах буферов. Смотрю в небо и высоко поднял камеру - 2 мс!!
Это много. Смотри где у тебя жестко тупит CPU.
Terrain demo, LODs1 фев. 201017:46#46
ud1
> Один нод это 2000 поликов, но нодов разное количество, и они разных размеров.
Kloun
> у тебя узлы разных размеров?
может размеры с точки зрения содержащихся в нем полигонов?? Да, и не нужно мешать понятия. Есть понятия узла, а есть понятия листа. Да к вот лист - это узел, с которым ассоциированы геометрические данные.
Terrain demo, LODs1 фев. 201010:20#26
innuendo
> а зачем там это? GL_ARB_map_buffer_range еще в 2.1 есть.

>а разве нельзя простыми SubData ?
вопрос не ко мне. у него сделано так, и кстати я тестил GL_ARB_map_buffer_range, он более оптимальней чем SubData.

Terrain demo, LODs1 фев. 20109:56#19
innuendo
> root->CollectGarbage(rebuild_number - 300);
тут наверное не имеется ввиду сборка мусора у него.
Terrain demo, LODs1 фев. 20109:46#15
ud1
> > в смысле, VB не обновляешь при стыке ?
> Обновляю, патчи дожны определиться с общей стороной, индексами это не решить.
помоему все там решается без заливок.
Terrain demo, LODs1 фев. 20109:45#14
ud1
> Требования OpenGL 3.2
а зачем там это? GL_ARB_map_buffer_range еще в 2.1 есть.
ты не часто new/delete делаешь в кадре? если так это не хорошо, я про
root->CollectGarbage(rebuild_number - 300);
Ну и dynamic_cast это жесть:
CBuffer *ind_buf = dynamic_cast<CBuffer *> (indexBuffer);
...
CShaderProgram *program = dynamic_cast<CShaderProgram *>(prg);
смотрю ты используешь 16 битный индексный буфер, и смещаешь стартовые вершины в вершинном буфере
glVertexAttribPointer(location, layout.ncomponents, AttrTypes[layout.type], 
      GL_FALSE, layout.stride, (byte *)NULL + layout.offset);

ПРоблемы с STD::vector и производительностью (c++/cli). Прошу потестить проект.29 янв. 201012:09#9
-sin-
#define _HAS_ITERATOR_DEBUGGING 0
#define _SECURE_SCL 0
#include <vector>
double* V = &v[0];
for(int i=0;i<100;i++)
      for(int j=0;j<10000;j++)  
      {
        //a[j]=j*j; // 1 вариант
        V[j]=j*j;    // 2 вариант
      }
PS3 таки ломанули27 янв. 201018:20#17
IronPeter
> пережал проводочек, деаллоцировал память, отжал проводочек.
а что значит пережать/разжать? это типа блокировка шины для монопольного доступа?
Скелетная анимация27 янв. 20109:40#8
WerWoolf
Пиши экспортер из 3DS Max, Maya.
И всё-таки SceneGraph.26 янв. 201023:29#9
Subject
Сделай просто для начала дерево объектов для Frustum Culling'а. Уже будет с чего развивать. Советую глянуть как сделано в Ogre.
помогите с quadtree26 янв. 20109:12#3
Loxx45
> 1)если треугольник попадает в несколько нод,то как лучше рисовать?создавать
> динамический массив индексов или все-таки рисовать этот треуголник несколько
> раз?
???? Зачем это делать для ландшафта? то что ты описал делается для сложной геометрии, у ландшафта нет таких проблем когда полигон на границе узлов.
Или у тебя здания вместе с ладншафтом в виде некого хранения геометрии? если так, то рисуй полигон несколько раз. Процент рассечения полигона на границе мал, им можно пренебречь. Если просто для ладшафта, то рекурсивно строй узлы, пока размер узла не будет содержать заданное число полигонов, это подбирается экспериментально, ну задается для удобства в неком конфиг файле, тогда узел будет листом, тут записывай ссылку на буферы(VB/IB), стартовые вершины, индексы(как раз для всяких glDrawElements), и информацию о лодах. К примеру для ладшафта 1024x1024, 64x64 - размер патча, листа Quadtree.
>2)как рисовать?для каждой ноды вызывать glDrawElements/glDrawArrays(есть сомнение что будет медленно работать)?
>пишу для айфона,так что посоветуйте оптимальный способ
Собирай рекурсивно все видимые листья при повороте камеры, можно еще по расстоянию до камеры листья отсортировать для оптимизации использования Z буфера, ставь буферы и рисуй листья.
Частицы. (комментарии)23 янв. 201011:16#5
0r@ngE
> glBegin, glVertex3f - OMG!
это фигня еще, Swap_part(prtcl[index], prtcl[colpr]), setlength(sizep,colpr), normalize
это жесть, эх хорошо CPU потусуется в неоптимизированном коде.
Посоветуйте хорошую литературу по многопоточное программирование.22 янв. 201011:37#6
Zefick
>Чтобы программировать многопоточные приложения достаточно знать одну функцию из библиотеки С++ - _beginthreadex.
да... может в перлы :) ?
Создание реалистичной поверхности воды с использованием GLSL (комментарии)19 янв. 201010:04#176
atwood
висит на 7600 GT, уже раз третий качаю, не показывает окно, может потому-что на Delphi ? Зачем ты в архив пишешь этот хлам *.obj,*.tds, *.~* ?
skinned instancing (dx9)15 янв. 201012:02#50
innuendo
> какой код даёт Cg в glslv ?
// glslv output by Cg compiler
// cgc version 2.2.0010, build date Sep 29 2009
// command line args: -q -profile glslv -entry displace_mesh ATI_draw_buffers EXT_gpu_shader4
// source file: vertex_texture.cg
//vendor NVIDIA Corporation
//version 2.2.0.10
//profile glslv
//program displace_mesh
//semantic displace_mesh.modelViewProj
//semantic displace_mesh.height_field
//var float4x4 modelViewProj :  : _modelViewProj1[0], 4 : 3 : 1
//var sampler2D height_field :  : _height_field1 : 4 : 1
//var float2 position : $vin.POSITION : POSITION : 0 : 1
//var float4 oPosition : $vout.POSITION : POSITION : 1 : 1
//var float3 oColor : $vout.COLOR : COLOR : 2 : 1

uniform vec4 _modelViewProj1[4];
uniform sampler2D _height_field1;
float _vv0008;
float _vv0010;
float _vv0012;
float _a0014;
float _b0016;
float _a0018;
float _b0020;
float _a0022;
float _b0024;
vec4 _r0026;
vec4 _v0026;

 // main procedure, the original name was displace_mesh
void main()
{

    vec4 _oPosition;
    vec3 _oColor;
    float _height;
    vec3 _displacedPosition;
    vec2 _TMP2;

    _height = texture2D(_height_field1, gl_Vertex.xy).x;
    _TMP2 = 3.50000000E+000*(2.00000000E+000*gl_Vertex.xy - 1.00000000E+000);
    _displacedPosition = vec3(_TMP2.x, _TMP2.y, _height);
    _a0014 = _height - 1.00000001E-001;
    _b0016 = 1.00000000E+000 - abs(_a0014);
    _vv0008 = max(0.00000000E+000, _b0016);
    _a0018 = _height - 5.00000000E-001;
    _b0020 = 1.00000000E+000 - abs(_a0018);
    _vv0010 = max(0.00000000E+000, _b0020);
    _a0022 = _height - 8.99999976E-001;
    _b0024 = 1.00000000E+000 - abs(_a0022);
    _vv0012 = max(0.00000000E+000, _b0024);
    _oColor = (_vv0008*_vv0008)*vec3( 0.00000000E+000, 2.00000003E-001, 1.00000000E+000) + (_vv0010*_vv0010)*vec3( 0.00000000E+000, 1.00000000E+000, 0.00000000E+000) + vec3(_vv0012*_vv0012, _vv0012*_vv0012, _vv0012*_vv0012);
    _v0026 = vec4(_displacedPosition.x, _displacedPosition.y, _displacedPosition.z, 1.00000000E+000);
    _r0026.x = dot(_modelViewProj1[0], _v0026);
    _r0026.y = dot(_modelViewProj1[1], _v0026);
    _r0026.z = dot(_modelViewProj1[2], _v0026);
    _r0026.w = dot(_modelViewProj1[3], _v0026);
    _oPosition = _r0026;
    gl_FrontColor.xyz = _oColor;
    gl_Position = _r0026;
} // main end
запуска как обычно. но подправил одну строчку
myCgVertexProfile = cgGetProfile("glslv");

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр