Форум программистов, компьютерный форум, киберфорум
DirectX
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
0 / 0 / 1
Регистрация: 24.10.2011
Сообщений: 39
1

Как нарисовать геометрические фигуры

11.06.2013, 04:09. Показов 4942. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите нарисовать геометрические фигуры (например треугольник,круг) в библиотеке dll.
Пока что реализовал квадрат или прямоугольник с помощью DrawBox
Код
DrawBox( int x, int y, int w, int h, D3DCOLOR BoxColor, IDirect3DDevice9* pDevice )
Через буфер вершин фигура не выводится
Код
struct CUSTOMVERTEX {FLOAT X, Y, Z, RHW; DWORD COLOR;};
#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
CUSTOMVERTEX vertices[] =
	{
    	{ 0.0f, 0.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0) },
		{ 1024.0f, 0.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255) },
    	{ 1024.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0) },
		{ 0.0f, 0.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0) },
		{ 1024.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0) },
		{ 0.0f, 400.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0) }
	};
Может быть что не так в коде? я этот весь код забивал под функцию if(test){ тут весь код }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2013, 04:09
Ответы с готовыми решениями:

с++ нарисовать геометрические фигуры
Как сделать программу которая выведет на экран геометрическую фигуру: 1.квадрат 2.треугольник...

Нарисовать 2 геометрические фигуры
В а)пирамида; б)куб;

Нарисовать указанные геометрические фигуры с учетом видимых и невидимых линий, обозначив вершины
В одном приложении на разных вкладках выполнить следующие задания: Задание 1. Нарисовать...

Как узнать пересекаются ли геометрические фигуры?
На форме рисую фигуры которые описываются Regionами Polygon = New Drawing2D.GraphicsPath()...

4
Заблокирован
11.06.2013, 10:39 2
Цитата Сообщение от Ванек777 Посмотреть сообщение
Через буфер вершин фигура не выводится
С чего ты взял? Может для начала стоит отодвинуть камеру подальше, например так:
C++
1
2
3
4
5
6
7
8
   XMVECTOR Eye = XMVectorSet( 0.0f, 3.0f, -1500.0f, 0.0f );
    XMVECTOR At = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
    XMVECTOR Up = XMVectorSet( 0.0f, 1.0f, 0.0f, 0.0f );
    g_View = XMMatrixLookAtLH( Eye, At, Up );
 
    CBNeverChanges cbNeverChanges;
    cbNeverChanges.mView = XMMatrixTranspose( g_View );
    g_pImmediateContext->UpdateSubresource( g_pCBNeverChanges, 0, NULL, &cbNeverChanges, 0, 0 );
И сделать заднюю отсекающую плоскость подальше, у тебя ж кубик не маленький.... например так:
C++
1
2
3
4
5
g_Projection = XMMatrixPerspectiveFovLH( XM_PIDIV4, width / (FLOAT)height, 0.01f, 10000.0f );
    
CBChangeOnResize cbChangesOnResize;
cbChangesOnResize.mProjection = XMMatrixTranspose( g_Projection );
g_pImmediateContext->UpdateSubresource( g_pCBChangeOnResize, 0, NULL, &cbChangesOnResize, 0, 0 );
Может у тебя в пискельном шейдере косяк и твой прямоугольник чёрный?
Может у тебя рисуются индекстный прямоугольники, а тип стоит TRIANGLELIST или наоборот?

В общем код в студию!
0
23 / 23 / 3
Регистрация: 15.12.2012
Сообщений: 314
11.06.2013, 12:45 3
Да, покажи хотя бы часть кода отрисовки и думаю все станет ясно, но учитывая что такие большие координаты точек, стоит установить перспективу и матрицу вида как говорит FarStar, только вот не понимаю почему используется префикс XM_, кажется должны быть D3DXMatrix, D3DXVECTOR3 Eye и т.д. Это пользовательский тип или какая-то библиотека типо XNA ?
0
0 / 0 / 1
Регистрация: 24.10.2011
Сообщений: 39
13.06.2013, 14:29  [ТС] 4
Код
LineBuilder::LineBuilder(IDirect3DDevice9* Device)
{
D3DXCreateLine(Device , &oLine);	
}
void LineBuilder::DrawCircle(int X, int Y, int radius, int numSides, D3DCOLOR Color) 
{ 
D3DXVECTOR2 Line[128]; 
float Step = 3.14159265358979323846f * 2.0 / numSides; 
int Count = 0; 
for (float a=0; a < 3.14159265358979323846f * 2.0; a += Step) 
{ 
float X1 = radius * cos(a) + X; 
float Y1 = radius * sin(a) + Y; 
float X2 = radius * cos(a+Step) + X; 
float Y2 = radius * sin(a+Step) + Y; 
Line[Count].x = X1; 
Line[Count].y = Y1; 
Line[Count+1].x = X2; 
Line[Count+1].y = Y2; 
Count += 2; 
} 

this->oLine->Begin(); 
this->oLine->Draw(Line,Count,Color); 
this->oLine->End(); 
}
Вот код для вывода круга, можно и треугольник вывести, но при включении функции
Код
if(cItem.test)
{
MenuBox->DrawCircle(20,40,20,10,RED);	 
}
происходит закрытие приложения
-----------------------------------------------------
операц система windows 8 64 bit
0
0 / 0 / 1
Регистрация: 24.10.2011
Сообщений: 39
19.06.2013, 19:12  [ТС] 5
удалите тему, толка нет от нее.
0
19.06.2013, 19:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.06.2013, 19:12
Помогаю со студенческими работами здесь

Как рисовать элементарные геометрические фигуры?
Всем привет!!! Вопрос конечно гулповатый, но все же. Нужно про помощи WinApi прорисовывать...

Геометрические фигуры
Разработать абстрактный класс Геометрическая- Фигура с*полями ПлощадьФигуры и*ПериметрФигуры ....

Геометрические фигуры
Доброго времени суток, господа. Возник вопрос. Подскажите, какие функции в с++ используются для...

Геометрические фигуры
Здраствуйте, решил освоить язык C# и наткнулся на задачу . Необходимо написать функцию,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru