Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.05.27;
Скачать: CL | DM;

Вниз

Возникла проблема с Direct3d на новых карточках ATI x2000   Найти похожие ветки 

 
bioSerg   (2007-10-09 10:41) [0]

Возникла проблема с Direct3d на новых карточках ATI x2000.
Использовалл Direct3d для вывода двумерных графиков и рисования некоторых дополнительных "красивостей". Возникла проблема с этими "красивостями", почему-то перестала работать закраска градиентом, т.е. треугольники стали рисоваться одноцветными.
Самому мне кажеться, что опция закраски градиентом перестала включаться по умолчанию. Но как её включить не знаю.


 
RzCoDer ©   (2007-10-09 11:32) [1]

дак а что тебе мешает явно задать цвета вершин треугольников?


 
bioSerg   (2007-10-09 11:37) [2]

Цвета заданы явно.
Но градиентная заливка не происходит.
Похоже на эффект режима GL_FLAT в OpenGL


 
Sapersky   (2007-10-09 19:24) [3]

Вообще-то не должны настройки по умолчанию зависеть от карты. Хотя с кривыми драйверами всё может быть.
Включить:
SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
Также можно попробовать D3DRS_COLORVERTEX (вкл.), D3DRS_LIGHTING (выкл.).


 
bioSerg   (2007-10-10 08:59) [4]

Спасибо. Попробую.


 
bioSerg   (2007-10-17 14:10) [5]

к сожалению не вышло

код инициализации
procedure TSD3D.BeginScene;
begin
if FNeedResize then
begin
  Resize;
  FNeedResize:=False;
end;
if FD3DDevice=NIL then
 raise Exception.Create("D3D Lock UnLock Error");
if FAILED(FD3DDevice.Clear(0, nil, D3DCLEAR_TARGET, FClearColor, 1.0, 0)) then
 raise Exception.Create("D3D Lock UnLock Error");
if FAILED(FD3DDevice.BeginScene) then
 raise Exception.Create("D3D Lock UnLock Error");
FD3DDevice.SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);
FD3DDevice.SetRenderState(D3DRS_COLORVERTEX,iTrue);
FD3DDevice.SetRenderState(D3DRS_LIGHTING,iFalse);
end;

код рисования

             d3d.BeginDraw(D3DPT_TRIANGLEFAN);
               d3d.SetColor($008080);
               d3d.Vertex(LineWid,zeroy);

               d3d.SetColor(rgb3d($00,$08*4,$08*4));
               d3d.Vertex(0,zeroy-13);

               for j:=24 to 31 do
               begin
                 d3d.SetColor(rgb3d($00,$08*(abs(j-16) div 2),$08*(abs(j-16) div 2)));
                 d3d.Vertex(LineWid+cos(j/16*pi)*13,zeroy+sin(j/16*pi)*13);
               end;
               for j:=0 to 8 do
               begin
                 d3d.SetColor(rgb3d($00,$08*(abs(j-16) div 2),$08*(abs(j-16) div 2)));
                 d3d.Vertex(LineWid+cos(j/16*pi)*13,zeroy+sin(j/16*pi)*13);
               end;

               d3d.SetColor(rgb3d($00,$08*4,$08*4));
               d3d.Vertex(0,zeroy+13);

               d3d.SetColor(rgb3d($00,$80,$80));
               d3d.Vertex(0,zeroy);

               d3d.SetColor(rgb3d($00,$08*4,$08*4));
               d3d.Vertex(0,zeroy-13);

             d3d.EndDraw;


 
Sapersky   (2007-10-17 20:14) [6]

Честно говоря, такой псевдо-OpenGL код вижу первый раз в жизни (это т.н. managed DX? или какой-то дополнительный класс?)
Могу посоветовать только найти пример, в котором цветовая интерполяция работает, и делать как там. Например, см. папку Demo в заголовках от Clootie.


 
bioSerg   (2007-10-18 07:46) [7]

Это класс-обёртка. Сделал сам чтобы упростить 2D вывод. Нашёл "ошибку".
Для заполнения массива 2D вершин я использовал следующий код.

procedure TSD3D.Vertex(x, y: Single);
var
 v1,v2 : TCUSTOMVERTEX;
 v     : Integer;
begin
FInternalVertex[FInternalPosition].X:=x;
FInternalVertex[FInternalPosition].Y:=y;
FInternalVertex[FInternalPosition].Z:=0;
FInternalVertex[FInternalPosition].RHW:=0;
FInternalVertex[FInternalPosition].Color:=FCurrentColor;


Как оказалось нужно было изменить значение RHW на 1.
По видимому раньше эта ошибка прощалась и я не обращал на неё внимания.

Большое спасибо за поддержку.



Страницы: 1 вся ветка

Текущий архив: 2012.05.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
2-1327401367
gvozdkoff
2012-01-24 14:36
2012.05.27
заполнение массива в Javascript из Delphi


2-1327321388
jiura
2012-01-23 16:23
2012.05.27
Как определить тип данных (число текст, дата) в переменной*


2-1327500695
jacksotnik
2012-01-25 18:11
2012.05.27
Помогите с деструктором


1-1293713705
Vidi
2010-12-30 15:55
2012.05.27
Запись данных в Excel. Как найти заданную пользователем ячейку?


2-1327396523
sem
2012-01-24 13:15
2012.05.27
изменение регистра символов в RichEdit