[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    Подскажите, почему не рендерится треугольник? Просто белый экран и всё(

    Code:
    #include <windows.h>
    #include <d3d9.h> 
    #include <d3dx9.h> 
    
    #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
    
    #pragma comment (lib, "d3d9.lib")
    #pragma comment (lib, "d3dx9.lib")
    
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    HRESULT InitialDX(HWND hWnd);    // Функция инициализации DIRECTX 
    HRESULT InitialBufferVershin();
    void Render();    // Функция рендеринга(отрисовки) 
    void ReleaseDX();   // Функция освобождения устройств. 
    
    WNDCLASSEX windowsclass;
    MSG msg;
    HWND hWnd;
    LPDIRECT3D9 pDirect3D = 0;   
    LPDIRECT3DDEVICE9 pDirect3DDevice = 0;
    LPDIRECT3DVERTEXBUFFER9 pBufferVershin = NULL;
    struct CUSTOMVERTEX
    {
    	FLOAT x, y, z, rhw;
    	DWORD color;
    };
    
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wparam,LPARAM lparam)   //функция обработки сообщений 
    { 
      switch(msg) 
      { 
    case WM_DESTROY:    // закрытие(уничтожение) окна 
        { 
         ReleaseDX(); 
         PostQuitMessage(0); 
         return 0; 
        } 
      } 
      return (DefWindowProc(hWnd,msg,wparam,lparam)); 
    } 
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) 
    { 
    
      // инициализация класа окна 
      windowsclass.cbSize = sizeof(windowsclass);    // Размер всей структуры 
      windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);    //Цвет фона окна 
      windowsclass.hCursor = LoadCursor(NULL, IDC_ARROW);  //Вид курсора 
      windowsclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);    //Иконка приложения 
      windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);    // Иконка в заголовке окна 
      windowsclass.hInstance = hInstance;      //Экземпляр приложения 
      windowsclass.lpfnWndProc = WinProc;      //Наша функция обработки событий 
      windowsclass.lpszClassName = L"windowsclass";   //Имя класса окна 
      windowsclass.style = CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW;    //Задание стиля окна 
       
      RegisterClassEx(&windowsclass);  //Регистрация класа окна в операционной системе 
    
      //Создание окна 
      hWnd = CreateWindow( 
       L"windowsclass",    //Имя класса окна 
       L"DirectX",  // Заголовок окна 
       WS_OVERLAPPEDWINDOW|WS_VISIBLE,    //Стиль окна 
       100, 100,  // Координаты левого верхнего угла 
       600,   // Ширина окна 
       600,   // Высота окна 
       NULL,   // Дескриптор родительского окна 
       NULL,   // Дескриптор меню 
       hInstance,  // Экземпляр 
       NULL);  // Дополнительные параметры 
    
    if (SUCCEEDED(InitialDX(hWnd))) 
       {   
    	   if(SUCCEEDED(InitialBufferVershin()))
    	   {
    			ShowWindow(hWnd, nShowCmd);    // Вывод окна 
    			UpdateWindow(hWnd);   // Обновление окна 
    
    			ZeroMemory(&msg,sizeof(msg));    //Очистка сообщений 
    
    			while(msg.message!=WM_QUIT)    // Цикл обработки сообщений 
    			{ 
    			 if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) 
    			 { 
    			  TranslateMessage(&msg); 
    			  DispatchMessage(&msg); 
    			 } 
    			 else 
    			 {
    				 Render();   //Наш код 
    			 } 
    			}  
    	   }
       } 
    }
    
    HRESULT InitialBufferVershin()
    {
    	CUSTOMVERTEX Vershin[] = 
    	{
    		{30.0f, 30.0f, 0.5f, 0.1f, 0xffff0000, },
    		{30.0f, 30.0f, 0.5f, 0.1f, 0xff00ff00, },
    		{15.0f, 15.0f, 0.5f, 0.1f, 0xff0000ff, },
    	};
    
    	pDirect3DDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &pBufferVershin, NULL);
    	VOID* pBV;
    	pBufferVershin->Lock(0, sizeof(Vershin), (VOID**)&pBV, 0);
    	memcpy(pBV, Vershin, sizeof(Vershin));
    	pBufferVershin->Unlock();
    	return S_OK;
    }
    
    HRESULT InitialDX(HWND hWnd) 
    { 
       if(NULL==(pDirect3D=Direct3DCreate9(D3D_SDK_VERSION)))    //создание основного интерфейса 
        return E_FAIL; 
       D3DDISPLAYMODE Display;    // структура с настройками монитора 
       if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&Display))) // получение настроек монитора. 
        return E_FAIL; 
    
       D3DPRESENT_PARAMETERS Direct3DParametr;  // Структура с настройками 
       ZeroMemory(&Direct3DParametr,sizeof(Direct3DParametr)); // Обнуление структуры 
       Direct3DParametr.Windowed=TRUE;       // Рeжим отображения приложения(true - оконное, false -полноэкранное) 
       Direct3DParametr.SwapEffect=D3DSWAPEFFECT_DISCARD;  // Метод переключения буферов 
       Direct3DParametr.BackBufferFormat=Display.Format;  // Формат пикселя(колличество разрядов цвета) 
       Direct3DParametr.EnableAutoDepthStencil=TRUE;   // Управление буфером глубины 
       Direct3DParametr.AutoDepthStencilFormat=D3DFMT_D16;  // Формат буфера глубины 
       Direct3DParametr.BackBufferWidth=Display.Width;   // Ширина буфера 
       Direct3DParametr.BackBufferHeight=Display.Height;  // Высота буфера 
       //Direct3DParametr.FullScreen_RefreshRateInHz=Display.RefreshRate;    //Частота обновления экрана(только в полноэкранном режиме) 
         
       if (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта 
        D3DDEVTYPE_REF,  // тип устройства 
        hWnd,    // дескриптор родительского окна 
        D3DCREATE_HARDWARE_VERTEXPROCESSING,    //режим обработки шейдеров 
        &Direct3DParametr,    // структура с настройками 
        &pDirect3DDevice))) // указатель на устройство 
       {
    	 MessageBox(hWnd, L"Error", L"Error", MB_OK|MB_ICONEXCLAMATION);
         return E_FAIL; 
       }
       return S_OK; 
    }
    
    void Render() 
    { 
       pDirect3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(255,255,255),0.0f,0); //Очистка вторичного буфера 
       pDirect3DDevice->BeginScene();
       
       pDirect3DDevice->SetStreamSource(0, pBufferVershin, 0, sizeof(CUSTOMVERTEX)); 
       pDirect3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
       pDirect3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
    
       pDirect3DDevice->EndScene();    //Конец рендеринга 
       pDirect3DDevice->Present(NULL,NULL,NULL,NULL); // копирование вторичного буфера в первичный 
    } 
    
    void ReleaseDX() 
    { 
    	if(pBufferVershin!=NULL)
    		pBufferVershin->Release();
       if(pDirect3DDevice!=NULL) 
        pDirect3DDevice->Release(); 
       if(pDirect3D!=NULL) 
        pDirect3D->Release(); 
    } 
     
    1 person likes this.
  2. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    В универе задали наваять прогу, работа с динам.типами данных, значит нужно создать двунаправленный список (осуществить поиск по ключу, добавление и тд.)

    Лекции пропустил, поэтому не пойму что такое двунаправленный список и чем он отличается от однонаправленного, помогите отыскать нужный "велосипед" (если есть) или тыкните, пожалуйста, где почитать об этом.
     
  3. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    In google: "двунаправленный список c++".
     
    1 person likes this.
  4. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Да гугол помог)
    Но не могу найти как осуществлять поиск по ключу в двунаправленном списке:
    PHP:
    struct list
     {
      
    int key;
      list *
    next;
      list *
    previous;
     };
     
  5. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    может поможет:
    http://www.solarix.ru/for_developers/cpp/boost/multi_index/ru/an/multi_index.shtml
     
    1 person likes this.
  6. dzhioev

    dzhioev New Member

    Joined:
    3 Oct 2010
    Messages:
    3
    Likes Received:
    2
    Reputations:
    0
    Ну а что тут искать?
    PHP:
    list* current start;
    while (
    current != NULL && current->key != search_key) {
         
    current current->next;
    }
    return 
    current;
     
    1 person likes this.
  7. geforse

    geforse Elder - Старейшина

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    всем спасибо, плюсанул)
    Ещё есть сомнения в "Добавления элемента перед максимальным ключом", помогите )

    зы: не выходит список инициализировать, тоесть при первом запуске программы нужно заполнить список, а потом уже добавлять, если нужно, новые элементы
     
    #5727 geforse, 12 Oct 2010
    Last edited: 12 Oct 2010
  8. dzhioev

    dzhioev New Member

    Joined:
    3 Oct 2010
    Messages:
    3
    Likes Received:
    2
    Reputations:
    0
    Для этого надо реализовать два метода:
    1)
    PHP:
    list* find_max(list* start) {
         list* 
    max_node start;
         list* 
    current start->next;
         while (
    current != NULL) {
              if (
    current->key max_node->key) {
                   
    max_node current;
              }
              
    current current->next;
         }
         return 
    max_node;
    }
     
    2)
    PHP:
    void insert_before(list* place, list* new_node) {
        
    new_node->previous place->previous;
        
    place->previous  new_node;
        
    new_node->next place;
    }
    Теперь просто можно написать insert_before(find_max(start), new_node);
     
    1 person likes this.
  9. Jest

    Jest New Member

    Joined:
    4 Oct 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Никак не могу понять - посылаю запрос на сервер ( GET ), в ответ пишет строки с информацией, а ниже какие-то символы, причём их много... что это за символы и как их распознать?
     
  10. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Заголовки ответов?
     
  11. llexus

    llexus Member

    Joined:
    19 Sep 2010
    Messages:
    57
    Likes Received:
    6
    Reputations:
    10
    или страница в gzip.
    больше конкретики. какой запрос, куда, какой ответ?
     
  12. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    Подскажите, как мне вывести текст в DirectX 9 c++.
    Я учу DirectX по книге Горнакова, а там с исходником проблема)
     
  13. Jest

    Jest New Member

    Joined:
    4 Oct 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Выкладываю скрин ответа:
    [​IMG]
    Собственно интересует всякая хрень в середине, что это?

    Код запроса:
    Code:
    char url[] = "/"; 
    char host[] = "rap-portal.org.ua"; 
    sprintf( request, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: Close\r\n\r\n", url, host ); 
     send( s, request, strlen( request ), 0 );
    recv( s, response, 5000, 0 );
     printf( "%s\r\n", response );
     
  14. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    вот решил выложить сюда книги и сайти по directX/openGl.
    Я создавал отдельную тему, но она канула в небытие)) Не знаю куда писать, если написал не туда, не ругайтесь)


    Книги по DirectX.
    Отечественных авторов:
    Станислав Горнаков - "DirectX 9: Уроки программирования на С++"
    Михаил Фленов - "DirectX & C++. Искусство программирования"
    Алексей Попов - "DirectX 10 - это просто. Программируем графику на С++"
    Переведенные на русский язык:
    Франк Луна - "Введение в программирование трехмерных игр с DirectX 9"
    Том Миллер - "Managed DirectX 9"
    Тодд Баррон - "Программирование стратегических игр с DirectX 9"
    Джим Адамс - "Direct3D 9.0. Продвинутая аннимация"
    Грег Снук - "3D- ландшафты в реальном времени на C++ и DirectX 9"
    Ален Торн - "Графика в формате DirectX 9. Полное руководство по использованию 3D-пространства"
    Ален Торн - "DirectX 9. Осваиваем 3D-пространство"
    Стен Трухильо - "Графика для Windows средствами DirectDraw"
    Англоязычные:
    Wolfgang F. Engel - "ShaderX2: Introductions and Tutorials with DirectX"
    Wolfgang F. Engel - "ShaderX2 Shader Programming Tips and Tricks with DirectX 9"
    Kris Gray - "Microsoft DirectX 9 Programmable Graphics Pipeline"
    Lynn Thomas Harrison - "Introduction to 3D Game Engine Design Using DirectX 9 and C Sharp"
    Jones W. — "Beginning DirectX 9"
    Kovach P.J. - "Inside Direct3D"
    James C. Leiterman - "Learn Vertex and Pixel Shader Programming with DirectX 9"
    Lobão A.S., Hatton E. - ".NET Game Programming with DirectX 9.0"
    Alan Thorn - "DirectX 9 Graphics: The Definitive Guide to Direct 3D"
    Alan Thorn - "DirectX 9 User Interfaces: Design and Implementation."
    Peter Walsh - "Advanced 3D Game Programming with DirectX 9.0"
    Dempski K. - "Real-Time Rendering Tricks and Techniques in DirectX"
    Онлайн-ресурсы:
    http://msdn.microsoft.com/en-us/directx/aa937788.aspx
    http://developer.nvidia.com/object/sdk_home
    http://www.intuit.ru/department/graphics/direct3dhlsl/

    Книги по OpenGL.
    Отечественных авторов:
    Боресков А.В. - "Графика трехмерной компьютерной игры на основе OpenGL"
    Михаил Краснов - "OpenGL. Графика в проектах Delphi"
    Сергей Гайдуков - "OpenGL. Профессиональное программирование трехмерной графики на C++."
    О. В. Бартеньев - "Графика OpenGL: программирование на Фортране"
    Баяковский Ю.М., Игнатенко А.В., Фролов А.И. - "Графическая библиотека OpenGL"
    Юрий Тихомиров - "OpenGL. Программирование трехмерной графики"
    Переведенные на русский язык:
    Ричард С. Райт-мл., Бенджамин Липчак - "OpenGL. Суперкнига"
    Эдвард Энджел - "Интерактивная компьютерная графика. Вводный курс на базе OpenGL"
    Дональд Херн, М. Паулин Бейкер - "Компьютерная графика и стандарт OpenGL"
    Т. Девис, Дж. Нейдер, Д. Шрайнер - "OpenGL. Руководство по программированию."
    Рэнди Дж. Рост - "OpenGL. Трехмерная графика и язык программирования шейдеров"
    Френсис Хилл - "OpenGL. Программирование компьютерной графики"
    Англоязычные:
    OpenGL Red Book and Blue Book
    Astle D., Hawkins K. - "Beginning OpenGL Game Programming"
    Buss S.R. - "A mathematical introduction with OpenGL"
    Robert P. Kuehne, J. D. Sullivan - "OpenGL Programming on Mac OS X: Architecture, Performance, and Integration"
    Martz P. - "OpenGL® Distilled"
    McReynolds T., Blythe D. - "Advanced Graphics Programming Using OpenGL"
    Randi Rost - "OpenGL Shading Language"
    Mark Segal, Kurt Akeley - "Graphics System: A Specification. (Version 1.5)"
    Онлайн-ресурсы:
    http://nehe.gamedev.net/

    Книги по программированию игр общей тематики:
    Андре Ламот - "Программирование трехмерных (3D) игр для Microsoft Windows.Советы профессионала по трехмерной графике и растеризации" (Tricks of the 3D Game Programming Gurus: Advanced 3D Graphics and Rasterization)
    Андре Ламот - "Программирование игр для Windows. Советы профессионала" (Tricks of the Windows Game Programming Gurus)
    Andre LaMothe - "Game Programming for the Propeller Powered HYDRA"
    Andre LaMothe - "The Black Art of Video Game Console Design"
    Andre LaMothe - "Tricks of the Game Programming Gurus"
    Andre LaMothe- "Black Art of 3D Game Programming: Writing Your Own High-Speed 3D Polygon Video Games in C"
    Andre LaMothe - "Teach Yourself Game Programming in 21 Days"
    Алексей Поляков, Виталий Брусенцев - "Методы и алгоритмы компьютерной графики в примерах на Visual C++"
    David H. Eberly. - "3D Game Engine Design"
    Eric Lengyel - "Mathematics for 3D Game Programming and Computer Graphics"
    Tomas Moller, Eric Haines - "Real-Time Rendering"
    Стюарт Рассел, Питер Норвиг - "Искусственный интеллект: современный подход (AIMA)"
    Алекс Дж. Шампандар - "Искусственный интеллект в компьютерных играх. Как обучить виртуальные персонажи реагировать на внешние воздействия"
    Д. Конгер - "Физика для разработчиков компьютерных игр"
    Ian Millington - "Game Physics Engine Development"
    David M. Bourg - "Physics for Game Developers"
    Мейсон МакКаски - "Звук в играх. Технологии программирования"
    Grenville Armitage, Mark Claypool, Philip Branch - "Networking and Online Games: Understanding and Engineering Multiplayer Internet Games"
    Эндрю Роллингз, Дэйв Моррис - "Проектирование и архитектура игр"
    В. В. Касихин - "Как стать создателем компьютерных игр. Краткое руководство."
    Маниш Сети - "Программирование игр"
    Серия "Game Programming Gems"
    Серия "GPU Gems"
     
    #5734 maked0n, 13 Oct 2010
    Last edited: 14 Oct 2010
  15. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Это не заполненая часть переменной char response (код каракули "-52").
    Чтобы в консоли не отображались эти каракули достаточно поставить нулл байт.
    Пример:
    Ну а:
    via: ...
    connection: close

    это и есть ваш ответ от сервера.
     
    #5735 wolmer, 13 Oct 2010
    Last edited: 13 Oct 2010
    1 person likes this.
  16. Jest

    Jest New Member

    Joined:
    4 Oct 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Ясно, а как получить данные со страницы или хотя бы HTML-код ?

    Например: Есть страница в интернете, которая выводит цифру на экран, как получить именно это цифру и запихнуть её в переменную?
     
  17. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Code:
    Ясно, а как получить данные со страницы или хотя бы HTML-код ?
    Так же как и вы получали (не знаю почему такой ответ вернулся у вас (как на скрине), но у меня все нормально принимается).
    Для того чтобы получить полную страницу - используйте в цикле recv.

    Пример:
    Code:
    	//примерный ответ от сервера
    	sprintf(request, "Header1: 200 ok\r\nHeader2: lalala\r\nHeader3: close\r\n\r\n1432");
    	int i = 0, i2 = 0, len, gowrite = 0, res = 0;
    	char int_in_char[12];
    	len = strlen(request);
    
    	while (i != len)
    	{
    		if (gowrite == 1)
    		{
    			int_in_char[i2] = request[i];
    			i2++;
    		}
    
    		//Если обнаружили конец описания хедеров сервера то
    		if ((request[i] == '\r') && (request[i + 1] == '\n') && (request[i + 2] == '\r') && (request[i + 3] == '\n'))
    		{
    			gowrite = 1;
    			i += 3;
    		}
    
    		i++;
    	}
    
    	int_in_char[i2] = '\0'; //нормализуем строку
    	res = atoi(int_in_char); //переводим в int вид
    html код между хедерами разделяется \r\n\r\n

    (простите за мой говно код :) )
     
  18. Jest

    Jest New Member

    Joined:
    4 Oct 2010
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Всё, с этим разобрался... Никак не могу понять отправку запроса:
    POST, передаются параметры:
    name=fobot
    pass=123456
    и д.р.

    Так вот - Как должна выглядеть строка запроса?
     
    #5738 Jest, 14 Oct 2010
    Last edited: 14 Oct 2010
  19. Region02

    Region02 New Member

    Joined:
    7 Jul 2009
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Всем привет. Какую книжку посоветуете скачать для изучения Си? Я новичок,и нужно чтоб было предельно понятно.
    P.S. На днях экзамен,а я ничего не знаю))
     
  20. maked0n

    maked0n New Member

    Joined:
    14 Sep 2010
    Messages:
    144
    Likes Received:
    3
    Reputations:
    0
    http://www.dialektika.com/books/5-8459-0810-8.html - должно быть всё предельно понятно
     
Thread Status:
Not open for further replies.