Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
OVERWAVE
0 / 1 / 0
Регистрация: 02.08.2012
Сообщений: 45
#1

3D программирование для начинающего - C++

19.08.2012, 11:28. Просмотров 2568. Ответов 23
Метки нет (Все метки)

Я хочу создать простейшее 3D пространство, где хотя бы будут линии осей и изменять угол камеры
Про 3D пространство чуть-чуть знаю. Можно использовать Visual C++ 2010(Уже есть), и если что еще понадобится, пишите. Скорее всего DirectX, но не знаю. Лучше всего подогнать литературу.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2012, 11:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос 3D программирование для начинающего (C++):

C++ для начинающего! - C++
Добрый день! Вопрос местным знатокам и гуру. Есть желание начать программировать на C++. Проблема в том, что не знаю, с чего начать. Книг...

Opengl и С++ для начинающего - C++
Приветствую всех! Можете пожалуйста подсказать хорошую книгу или видео урок по opengl и c++ для начинающего. Спасибо за ответы! ;)

Книга для начинающего по С++ - C++
Скажите, какая книга доступно мне покажет программирование на С++??? вопрос от новичка, даже не могу ничего посоветовать... Может вы...

Книга для начинающего - C++
Подскажите, какая книга будет мне лучше, если учесть что немного знаю С#: Самоучитель по С++(читал что требуется знание языка Си) или С++...

Указатели для начинающего - C++
Доброго времени суток Всем. Перерыл много литературы, но так и не понял как можно реализовать одну задачку: суть ее такова, что нужно...

Книга для начинающего - C++
Посоветуйте книгу для первокурсника по c++. препод посоветовал гебрерда шилдта "C++. Базовый курс". но сейчас не могу найти ее в продаже а...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
19.08.2012, 11:30 #2
Ставьте DirectX SDK, там примеры есть
0
OVERWAVE
0 / 1 / 0
Регистрация: 02.08.2012
Сообщений: 45
19.08.2012, 12:23  [ТС] #3
А что насчет литературы?
0
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
19.08.2012, 12:24 #4
Литература по программированию игр
0
OVERWAVE
0 / 1 / 0
Регистрация: 02.08.2012
Сообщений: 45
19.08.2012, 15:17  [ТС] #5
А поновее? Там сам пост 9 года, не говоря о книгах. Мне на хотя бы 2010 год, пожалуйста
0
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
19.08.2012, 15:52 #6
OVERWAVE, кардинально там ничего не изменилось за эти годы, так что можете смело любую книгу по понравившейся технологии и изучать 3D
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
19.08.2012, 16:03 #7
Цитата Сообщение от insolent Посмотреть сообщение
OVERWAVE, кардинально там ничего не изменилось за эти годы, так что можете смело любую книгу по понравившейся технологии и изучать 3D
Да ты что? А как же Parallax Occlusion Mapping в DirectX 11 и прочие фишки?
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
19.08.2012, 18:16 #8
Цитата Сообщение от insolent Посмотреть сообщение
кардинально там ничего не изменилось за эти годы
Как же я часто слышу это в университете. На архитектуре пк мы изучали архитектуру какого-то сраного аналога i286 по методичкам 80х годов так как новее не было и нам говорили "да там ничего не поменялось" . По программированию для Windows мы изучали Winapi для Win95 и нам тоже говорили "да сейчас программы также пишут, там ничего с 95 года не менялось", по цос мы изучали новейшие, как их называл препод, методы 90х годов и там по словам препода тоже ничего не изменилось ...
1
4iFF
19 / 19 / 1
Регистрация: 06.07.2012
Сообщений: 88
19.08.2012, 21:08 #9
Я бы вот тоже хотел графику покодить, чтобы это делать на С++ надо VS 2010 + DirectX SDK + лит-ра?Больше ничего не надо?
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
19.08.2012, 22:33 #10
ИМХО OpenGL круче этих ваших директиксов. И она свободная)
1
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
20.08.2012, 00:45 #11
nexen, думаю, что OVERWAVE для познания основ не нужно будет рельефное текстурирование.
1
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2012, 04:48 #12
http://d3dbegin.narod.ru/index.htm
1
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2012, 10:22 #13
Цитата Сообщение от OVERWAVE Посмотреть сообщение
Я хочу создать простейшее 3D пространство, где хотя бы будут линии осей и изменять угол камеры
Про 3D пространство чуть-чуть знаю. Можно использовать Visual C++ 2010(Уже есть), и если что еще понадобится, пишите. Скорее всего DirectX, но не знаю. Лучше всего подогнать литературу.
- вот простой пример пространтсва средствами АПИ в консольном приложении http://www.cyberforum.ru/order-progr...ml#post3242226
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
20.08.2012, 13:51 #14
Вот мой небольшой шаблон под Винду на OpenGL с рабочей камерой:
C++
#include <windows.h>
#include <GL\gl.h>
#include <GL\glu.h>
#include <math.h>
 
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
 
// ШИРИНА И ВЫСОТА ОКНА
int WIDTH   = 800;
int HEIGHT  = 600;
 
// КЛАВИШИ УПРАВЛЕНИЯ
#define VK_W    0x057 // W - ВПЕРЕД
#define VK_S    0x053 // S - НАЗАД
#define VK_A    0x041 // A - ВЛЕВО
#define VK_D    0x044 // D - ВПРАВО
#define VK_Q    0x051 // Q - ВЫХОД
#define VK_ESCAPE  //  ВЫХОД
 
 
// КООРДИТАТЫ КАМЕРЫ ПО ОСЯМ XYZ
float posx = 0.0;
float posy = 2.0;
float posz = 0.0;
 
// СКОРОСТИ ПЕРЕМЕЩЕНИЯ ПО ОСЯМ XYZ
float spdx = 0.0;
float spdy = 0.0;
float spdz = 0.0;
// СМЕЩЕНИЕ КУРСОРА
float dx = 0.0;
float dy = 0.0;
// УГЛЫ ВРАЩЕНИЯ
float yaw = 0.0;
float ptc = 0.0;
// КООРДИНАТЫ ТОЧКИ КУДА (ИЛИ ОТКУДА) СМОТРИТ КАМЕРА
float dxx = 0.0;
float dxz = 0.0;
float dyy = 0.0;
 
HWND        hwnd;
MSG         msg;
HGLRC       hRC;
HDC         hDC;
 
POINT pt;
float prevX;
float prevY;
 
 
 
//-----------------------------------------------------------------------------------------------
// ГЛАВНАЯ ФУНКЦИЯ
//-----------------------------------------------------------------------------------------------
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    WNDCLASSEX wcex;
    wcex.cbSize         = sizeof(WNDCLASSEX);
    wcex.style          = CS_OWNDC;
    wcex.hbrBackground  = (HBRUSH)(0);
    wcex.lpfnWndProc    = WindowProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = "classname";
    wcex.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    RegisterClassEx(&wcex);
    hwnd = CreateWindowEx( WS_EX_APPWINDOW, "classname", " ", WS_POPUPWINDOW, 0, 0, WIDTH, HEIGHT, HWND_DESKTOP, NULL, hInstance, NULL );
 
    //////////////////////////////////////////////////////////
 
    PIXELFORMATDESCRIPTOR pfd;
    int iFormat;
    hDC = GetDC (hwnd);
    ZeroMemory (&pfd, sizeof (pfd));
    pfd.nSize       = sizeof (pfd);
    pfd.nVersion    = 1;
    pfd.dwFlags     = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.iPixelType  = PFD_TYPE_RGBA;
    pfd.cColorBits  = 24;
    pfd.cDepthBits  = 16;
    pfd.iLayerType  = PFD_MAIN_PLANE;
    iFormat         = ChoosePixelFormat (hDC, &pfd);
    SetPixelFormat (hDC, iFormat, &pfd);
 
    hRC = wglCreateContext(hDC);
    wglMakeCurrent(hDC, hRC);
 
    //////////////////////////////////////////////////////////
 
    glViewport(0, 0, WIDTH, HEIGHT);
    glMatrixMode(GL_PROJECTION);
 
    gluPerspective(45.0f, (float)WIDTH/(float)HEIGHT, 0.1f, 1000.0f);
    glMatrixMode(GL_MODELVIEW);
 
    glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
    glDepthFunc(GL_LEQUAL);
    glDepthRange(0.0, 1.0);
    glEnable(GL_DEPTH_TEST);
 
 
    ShowWindow(hwnd, nCmdShow);
    ShowCursor(false);
 
    //////////////////////////////////////////////////////////
 
 
    float angle = 0.0; // СИНИЙ КВАДРАТ БУДЕТ ВРАЩАТЬСЯ
 
    while ( msg.message != WM_QUIT )
    {
        if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
            // ДВИЖЕНИЕ ВПРАВО-ВЛЕВО
            if      ( GetAsyncKeyState( VK_A ) < 0 )    { spdz = 0.05; }    // ДВИГАЕМСЯ ПО ОСИ X ЕСЛИ НАЖАТА КЛАВИША A
            else if ( GetAsyncKeyState( VK_D ) < 0 )    { spdz =-0.05; }    // ДВИГАЕМСЯ ПО ОСИ X ЕСЛИ НАЖАТА КЛАВИША D
            else                                        { spdz = 0.0; }     // ИНАЧЕ НЕ ДВИГАЕМСЯ ПО ЭТОЙ ОСИ
            // ДВИЖЕНИЕ ВПЕРЕД-НАЗАД
            if      ( GetAsyncKeyState( VK_W ) < 0 )    { spdx =-0.05; }    // ДВИГАЕМСЯ ПО ОСИ Z ЕСЛИ НАЖАТА КЛАВИША W
            else if ( GetAsyncKeyState( VK_S ) < 0 )    { spdx = 0.05; }    // ДВИГАЕМСЯ ПО ОСИ Z ЕСЛИ НАЖАТА КЛАВИША S
            else                                        { spdx = 0.0; }     // ИНАЧЕ НЕ ДВИГАЕМСЯ ПО ЭТОЙ ОСИ
 
            SetCursorPos(WIDTH/2, HEIGHT/2);// СТАВИМ КУРСОР В ЦЕНТР ОКНА
            GetCursorPos(&pt);              // ПОЛУЧАЕМ ПОЗИЦИЮ КУРСОРА
            prevX = pt.x;                   // ПО ШИРИНЕ
            prevY = pt.y;                   // ПО ВЫСОТЕ
            Sleep(10);                      // ДЕЛАЕМ НЕБОЛЬШУЮ ЗАДЕРЖКУ
            GetCursorPos(&pt);              // СНОВА ПОЛУЧАЕМ ПОЗИЦИЮ КУРСОРА
 
            dx = pt.x - prevX;              // ВЫЧИСЛЯЕМ СМЕЩЕНИЕ КУРСОРА ЗА 10 МИЛИСЕКУНД ПО ШИРИНЕ
            dy = pt.y - prevY;              // ВЫЧИСЛЯЕМ СМЕЩЕНИЕ КУРСОРА ЗА 10 МИЛИСЕКУНД ПО ВЫСОТЕ
 
            yaw += dx/1000.0;               // СМЕЩЕНИЕ ПО ШИРИНЕ НАКАПЛИВАЕТСЯ В УГОЛ ВРАЩЕНИЯ ВПРАВО-ВЛЕВО
            ptc += dy/1000.0;               // СМЕЩЕНИЕ ПО ВЫСОТЕ НАКАПЛИВАЕТСЯ В УГОЛ ВРАЩЕНИЯ ВВЕРХ-ВНИЗ
 
            // ОГРАНИЧИВАЕТ ВРАЩЕНИЕ КАМЕРЫ ВВЕРХ-ВНИЗ
            if (ptc >= 1.5) ptc = 1.5;
            if (ptc <=-1.5) ptc =-1.5;
 
            // ГОРИЗОНТАЛЬНОЙ ПЛОСКОСТЬЮ ЯВЛЯЕТСЯ X-Z
            dxx = sin(yaw); // dxx - ПОЛОЖЕНИЕ ТОЧКИ ОТНОСИТЕЛЬНО ОСИ X
            dxz = cos(yaw); // dxz - ПОЛОЖЕНИЕ ТОЧКИ ОТНОСИТЕЛЬНО ОСИ Z
            dyy = sin(ptc); // dyy - ПОЛОЖЕНИЕ ТОЧКИ ОТНОСИТЕЛЬНО ОСИ Y
 
            // КОРРЕКТИРУЕМ СКОРОСТЬ ПЕРЕМЕЩЕНИЯ В ЗАВИСИМОСТИ ОТ УГЛА ПОВОРОТА КАМЕРЫ
            // ЧТОБЫ КАМЕРА ДВИГАЛАСЬ ТУДА, КУДА СМОТРИТ, А НЕ ВДОЛЬ ОСЕЙ X И Z
            posz += spdz * dxx;
            posx += spdx * dxx;
            posx += spdz * dxz;
            posz -= spdx * dxz;
 
 
            glMatrixMode(GL_MODELVIEW);
            glLoadIdentity();
            // У МЕНЯ dxx, dyy И dxz ПРИБАВЛЯЮТСЯ К ПЕРВЫМ ТРЕМ ПАРАМЕТРАМ (КООРДИНАТЫ ГЛАЗ НАБЛЮДАТЕЛЯ)
            // ДЛЯ ТОГО, ЧТОБЫ ПОТОМ МОЖНО БЫЛО СДЕЛАТЬ КАМЕРУ ОТ 3-ГО ЛИЦА (ПОПРОБУЙТЕ dxx, dyy И dxz УМНОЖИТЬ В 10 РАЗ)
            gluLookAt( posx+dxx, posy+dyy, posz-dxz, posx, posy, posz, 0.0, 1.0, 0.0 );
 
            //-----------------------------------------------------------------------------------------------
 
            // НАЧИНАЕМ РИСОВАНИЕ
            glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
            glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 
            angle += 0.5;
            if (angle >= 360.0) angle = 0.0;
 
            // РИСУЕМ КВАДРАТ В ВЕРТИКАЛЬНОЙ ПЛОСКОСТИ
            glPushMatrix();
            glTranslatef( 0.0, 2.0, 5.0 );
            glRotatef( angle, 0.0, 1.0, 0.0 );
            glBegin(GL_QUADS);
            glColor3f(0.0, 0.0, 1.0);
            glVertex3f(  1.0, -1.0, 0.0 );
            glVertex3f(  1.0,  1.0, 0.0 );
            glVertex3f( -1.0,  1.0, 0.0 );
            glVertex3f( -1.0, -1.0, 0.0 );
            glEnd();
            glPopMatrix();
            // РИСУЕМ КВАДРАТ В ГОРИЗОНТАЛЬНОЙ ПЛОСКОСТИ
            glPushMatrix();
            glTranslatef( 0.0, 0.0, 0.0 );
            glRotatef( 0.0, 0.0, 1.0, 0.0 );
            glBegin(GL_QUADS);
            glColor3f(0.0, 0.5, 0.0);
            glVertex3f(-4.0,  0.0, -4.0 );
            glVertex3f(-4.0,  0.0,  4.0 );
            glVertex3f( 4.0,  0.0,  4.0 );
            glVertex3f( 4.0,  0.0, -4.0 );
            glEnd();
            glPopMatrix();
 
            glFlush();
            SwapBuffers (hDC);
        }
    }
 
    wglMakeCurrent(NULL, NULL);
    wglDeleteContext(hRC);
    ReleaseDC(hwnd, hDC);
    DestroyWindow(hwnd);
    return msg.wParam;
}
 
 
 
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CLOSE:
            PostQuitMessage(0);
            break;
        case WM_KEYDOWN:
            switch (wParam)
            {
                case VK_ESCAPE:
                case VK_Q:
                    PostQuitMessage(0);
                    break;
            }
            break;
        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}
1
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
20.08.2012, 15:12 #15
programina, смею заметить, что лучше это все делать в классе, и потом вызывать соотв функции с проверками на нажатия, какой нить функцией из кроссплатформенной библиотеки, ибо чисто под винду, это не труЪ, да и глобальные переменные это тоже ничего хорошего, и вообще KISS! Keep it simple, stupid!
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2012, 15:12
Привет! Вот еще темы с ответами:

Подскажите для начинающего! - C++
Подскажите с чего лучше начать изучать программирование для начинающего? Какие книги нужны?С какого языка начать? Программированием...

Посоветуйте литературу для начинающего на С++ - C++
Доброго времени суток. Посоветуйте пожалуйста литературу для начинающего программиста, желательно с самых азов

Практика для начинающего программиста на С++ - C++
Доброго всем дня. Не за горой май, а там уже и летняя практика. И, собственно, задался вопросом, куда можно было бы пойти начинающему...

Нужны задания для начинающего - C++
Если кому не трудно , дайте интересные задания по с++ для начинающего. Но не надо давать задания типа найти мак эл. массива. итд. я бы...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.08.2012, 15:12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru