Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2012, 23:10   #1
AlexCODER23
Пользователь
 
Аватар для AlexCODER23
 
Регистрация: 27.12.2010
Сообщений: 17
Радость 3D движок на C#

Здравствуйте!

Передо мной стоит задача написать простейший 3D графический движок, и реализовать на нем тени (любые). Суть состоит именно в написании своего движка, а не использовании уже готовых решений. Гугление касающихся этой области тем, собирание всех полученных знаний в кучу дали следующее:
- написаны классы:
Vector3D
Triangle (полигон))
Camera
zObject (Object уже есть, поэтому назвал так))
и собственно класс Scene где все это вертится

отрисовывается всё это дело на doublebuffered панели, что вполне меня устраивает (мне не важна производительность)

на данном этапе проблема заключается в следующем - объекты крутятся бог весть как.

начну по порядку:
имеется 3 точки (для примера хотел вращать треугольник)
AddPoint(0, -5, 1);
AddPoint(5, 0, 1);
AddPoint(-5, 0, 1);

и треугольник
AddTriangle(0, 1, 2); //индексы вершин

для проецирования 3D->2D делаю следующие преобразования:

для каждой вершины треугольника:
перевожу координаты вершины в глобальные координаты (добавляю координаты объекта, которому принадлежит вершина)
затем вычитаю координаты камеры (это так на будущее, сейчас камера имеет координаты (0,0,-10), т.е. особой роли при вращении ее позиция сейчас не играет)
затем я делаю следующее
умножаю друг на друга 3 матрицы:
Код:
Matrix first = new Matrix(new double[,]{
            {1,0,0},
            {0,Math.Cos(orientation.x),Math.Sin(orientation.x)},
            {0,-Math.Sin(orientation.x),Math.Cos(orientation.x)}
            });

            Matrix second = new Matrix(new double[,]{
            {Math.Cos(orientation.y),0,-Math.Sin(orientation.y)},
            {0,1,0},
            {Math.Sin(orientation.y),0,Math.Cos(orientation.y)}
            });

            Matrix third = new Matrix(new double[,]{
            {Math.Cos(orientation.z),Math.Sin(orientation.z),0},
            {-Math.Sin(orientation.z),Math.Cos(orientation.z),0},
            {0,0,1}
            });
            O = (first * second) * third;
где orientation = (0,0,0); // пробовал и (0,0,1) Нифика не помогло, это вектор с углами наклона камеры, логично если камера стандартная - угол наклона везде 0
и умножаю "O" на полученные координаты (по сути матрицу на вектор)

ну а дальше, чтобы получить 2D координаты:
x=x/z;
y=y/z;


Теперь к самой проблеме:
вращение, например по X происходит так:
Код:
public void RotateX(double angle)
        {
            Matrix rX = new Matrix();
            double Cos = Math.Cos(angle);
            double Sin = -Math.Sin(angle); //тут пробовал и без "-" - особой разницы нет
            rX.values = new double[,] {
            { 1, 0, 0 },
            { 0, Cos, Sin },
            { 0, -Sin, Cos } };
            Vector3D temp = this * rX;
            x = temp.x;
            y = temp.y;
            z = temp.z;
        }
Но отображается непонятно что.

Кто может сказать - где я ошибаюсь?

Буду очень благодарен за любые мысли и вообще за любую информацию в этой области.

P.S. слышал про отсечения, но на вид там и с ними лучше не станет)

Последний раз редактировалось AlexCODER23; 10.10.2012 в 23:23.
AlexCODER23 вне форума Ответить с цитированием
Старый 10.10.2012, 23:21   #2
AlexCODER23
Пользователь
 
Аватар для AlexCODER23
 
Регистрация: 27.12.2010
Сообщений: 17
По умолчанию

Может, кто-нибудь может посоветовать годные книги про этот раздел графики?
AlexCODER23 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движок webstream HTML и CSS 2 30.01.2011 04:17
3D Движок zmey31313 Gamedev - cоздание игр: Unity, OpenGL, DirectX 17 30.05.2010 10:14
Движок Alex2009 Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 25.08.2009 18:18
Помогитеу становить движок на сайт. Движок Joomla acmilan WordPress и другие CMS 2 01.04.2009 11:26
Движок DM_bite Gamedev - cоздание игр: Unity, OpenGL, DirectX 10 22.08.2008 19:11