Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2012.05.27;
Скачать: [xml.tar.bz2];

Вниз

Возникла проблема с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
2-1327559321
rusmus
2012-01-26 10:28
2012.05.27
Использование edit1


15-1327057073
И. Павел
2012-01-20 14:57
2012.05.27
Гитара


3-1276183014
REX
2010-06-10 19:16
2012.05.27
Вывод времени в QRDBText


3-1275680538
AlpenLeo
2010-06-04 23:42
2012.05.27
добавление даты в поле таблицы


15-1327330014
upc
2012-01-23 18:46
2012.05.27
Обмен валюты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский