Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - Kikert

Strony: [1] 2 3
1
Warsztat Summer of Code 2018 / Odp: Warsztat Summer of Code 2018
« dnia: Sierpień 02, 2018, 19:37:04 »
Osoba: Kikert
Kategoria: Gra na własnym silniku
Nazwa projektu: Konstruisto
Link do projektu na warsztat.gd: https://warsztat.gd/projects/konstruisto

Jakoś brakuje mi motywacji żeby popchnąć projekt w tym roku to się zgłoszę :) Prawdopodobnie nie skończę, ale będzie motywacja do pracy.

2
Inne ogłoszenia / Odp: Oddam książki (programowanie gier)
« dnia: Czerwiec 18, 2017, 20:51:56 »
Fichtenholz już poszedł?

3
OpenGL / Odp: [GLSL]Jedna zmienna na instancje w vertex shader
« dnia: Luty 26, 2017, 12:25:44 »
Może po prostu obliczenia da się zrobić wcześniej i ustawić glVertexAttribDivisor?

4
Szkółka / Odp: SFML wczytywanie polskich znaków
« dnia: Lipiec 22, 2015, 22:08:50 »
Spróbuj się trochę wysilić, zanim zaczniesz pisać na forum: http://www.cplusplus.com/reference/iterator/back_inserter/

Edit: Może niejasno wynika to z linku: Musisz załączyć odpowiednią bibliotekę, w tym przypadku #include <iterator> na górze pliku.

ASCII nie obsługuje polskich znaków z definicji.

Spróbuj pobawić się trochę podesłanym kodem, bo nie chce mi się wierzyć, że nie działa. Podejrzewam, że niespecjalnie się starałeś, skoro nawet nie wklepałeś w szukajkę błędu. sf::String finput trzyma tutaj prawidłowy napis przekonwertowany ze stringa, do którego wcześniej wczytano napis z pliku UTF-8.

5
Szkółka / Odp: SFML wczytywanie polskich znaków
« dnia: Lipiec 22, 2015, 20:29:37 »
Odkopany przykład z jakieś starszego projektu, nie musi działać z tą wersją :)

bool loadLangFile(string filename) {

fstream f(filename);

if (!f.good()) return false;

string id, input;
std::basic_string<sf::Uint32> binput;
sf::String finput;

while (f >> id) {
input = "";
binput = std::basic_string<sf::Uint32>();
getline(f, input);
sf::Utf8::toUtf32(input.begin(), input.end(), std::back_inserter(binput));
finput = binput;

data[id] = finput;
}

return true;

}

6
Warsztat Summer of Code 2015 / Odp: Wieśmin: Dziki Samogon
« dnia: Lipiec 09, 2015, 22:58:10 »
Czekam na serię „Poszukiwanie rynsztunku...” :)

7
Teraz brakuje „Silver for Monsters...”, mój ulubiony kawałek z albumu :)
Ścieżka super! :)

8
Audio / Odp: Moja muzyka
« dnia: Styczeń 10, 2015, 16:54:46 »
"No escape" bardzo mi się podoba, na początku drugiej minuty co dwie sekundy jest fajne... coś :)
W czym komponujesz?

9
Dyskusje / Warszawski gamedev w C#
« dnia: Styczeń 10, 2015, 16:52:07 »
Cześć,
Czy ktoś kojarzy jakieś firmy działające w Warszawie i okolicach, tworzące gry w C# (Unity, Windows Phone)?

10
Warsztat Summer of Code 2014 / Odp: Warsztat Summer of Code 2014
« dnia: Sierpień 16, 2014, 21:50:11 »
Do mojego projektu dołącza buoto, proszę o aktualizację.

11
OpenGL / Odp: Renderowanie heightmapy - nieprawidłowa kolejność funkcji
« dnia: Sierpień 11, 2014, 22:55:13 »
Anybody?

12
OpenGL / Renderowanie heightmapy - nieprawidłowa kolejność funkcji
« dnia: Sierpień 10, 2014, 16:17:32 »
Cześć,
Napisałem sobie renderowanie heightmapy i chciałem przenieść to do zewnętrznej klasy. Niestety w trakcie (nie wiem kiedy, tak byłoby dużo łatwiej) program przestał działać, to znaczy nie renderuje siatki.

Podejrzewam, że zmieniłem prawidłową kolejność funkcji. Przejrzałem kod kilka razy, ale wszystko wydaje mi się w porządku.

Czy ktoś mógłby rzucić okiem? Kod chyba jest w miarę czytelny:

#ifndef DEPENDENTIA_TESTSTATE_HPP
#define DEPENDENTIA_TESTSTATE_HPP

#include <glm/gtc/matrix_transform.hpp>

#include "../parrot/GameState.hpp"
#include "../Camera.hpp"
#include "../loadShaders.hpp"
#include "Map.hpp"
#include "MapRenderer.hpp"

#include <iostream>

class TestState : public Parrot::GameState {

public:
    void init();
    void cleanup();

    virtual void update(Parrot::Engine * engine, double frameTime, double currentTime);
    virtual void render(Parrot::Engine * engine);

    static TestState & getInstance() {
        static TestState instance;
        return instance;
    }

private:
    TestState() {};

private:
    GLuint programID;

    glm::mat4 VP;
    GLuint matrixID;
    Camera* camera;

    glm::mat4 projection;

    Map* gameMap;
    MapRenderer* gameMapRenderer;

};

void TestState::init() {

    // Shader
    programID = loadShaders("shaders/sample.vs", "shaders/sample.fs");

    // Projections
    projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);

    camera = new Camera(
        glm::vec3(-10, 0, -10), glm::vec3(10, 0, 10),
        3, 100,
        0, 360,
        10, 80
    );

    gameMap = new Map(3, 3);
    gameMapRenderer = new MapRenderer(gameMap, camera);

    CameraCommand cc;
    cc.aim = glm::vec3(0,0,0);
    cc.distance = 5;
    cc.rotationX = 0;
    cc.rotationY = 40;
    camera->updateCamera(cc);

    matrixID = glGetUniformLocation(programID, "MVP");

}

void TestState::cleanup() {

    glDeleteProgram(programID);

    delete gameMapRenderer;
    delete camera;
    delete gameMap;

}

void TestState::update(Parrot::Engine * engine, double frameTime, double currentTime) {
    camera->update(frameTime);
}

void TestState::render(Parrot::Engine * engine) {

    VP = projection * camera->getViewMatrix();
    glUniformMatrix4fv(matrixID, 1, GL_FALSE, &VP[0][0]);
    glUseProgram(programID);

    gameMapRenderer->render();

}

#endif // DEPENDENTIA_TESTSTATE_HPP

Zewnętrzna klasa:
#ifndef DEPENDENTIA_MAPRENDERER_HPP
#define DEPENDENTIA_MAPRENDERER_HPP

#include "Map.hpp"
#include <iostream>

class MapRenderer {

public:
    MapRenderer(Map* gameMap, Camera* camera) : gameMap(gameMap), camera(camera) {

        prepareOGLBuffers();
        prepareIndicesData();

    }

    void render() {

        /* if (gameMap has changed) */ generateHeightMapVA();

        glClearColor(0.234357f, 0.472656f, 0.667968f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // Temporary wireframe

        renderHeightMap();

    };

    ~MapRenderer() {

        glDeleteBuffers(1, &hmVBOindices);
        glDeleteBuffers(1, &hmVBO);
        glDeleteVertexArrays(1, &hmVAO);

    }

protected:

    void prepareOGLBuffers() {

        glGenVertexArrays(1, &hmVAO);
        glGenBuffers(1, &hmVBO);
        glGenBuffers(1, &hmVBOindices);

        glBindVertexArray(hmVAO);
        glBindBuffer(GL_ARRAY_BUFFER, hmVBO);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, hmVBOindices);

    }

    void prepareIndicesData() {

        hmIndices = new int[27] {
           0, 4, 1, 5, 2, 6, 3, 7, 16, // First row, then restart
           4, 8, 5, 9, 6, 10, 7, 11, 16, // Second row, then restart
           8, 12, 9, 13, 10, 14, 11, 15, 16 // Third row, no restart
        };

        glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(hmIndices), hmIndices, GL_STATIC_DRAW);

        delete[] hmIndices;

    }

    void generateHeightMapVA() {

        glm::vec3* heightMapVertices = new glm::vec3[gameMap->getHeightMapSize()];

        for (int i=0; i<gameMap->getHeightMapSize(); i++) {
            float x = float(i % (gameMap->getSizeX()+1)), z = float(i / (gameMap->getSizeX()+1));
            heightMapVertices[i] = glm::vec3(
                -0.5 + x / float(gameMap->getSizeX()),
                0.125 * (float) gameMap->getHeightAt(i),
                -0.5 + z / float(gameMap->getSizeY())
            );
        }

        glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec3) * gameMap->getHeightMapSize(), heightMapVertices, GL_STATIC_DRAW);
        delete[] heightMapVertices;

    }

    void renderHeightMap() {

        glEnable(GL_PRIMITIVE_RESTART);
        glPrimitiveRestartIndex(gameMap->getHeightMapSize());

        // 1rst attribute buffer : vertices
        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER, hmVBO);
        glVertexAttribPointer(
            0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
            3,                  // size
            GL_FLOAT,           // type
            GL_FALSE,           // normalized?
            0,                  // stride
            (void*)0            // array buffer offset
        );



        glDrawElements(GL_TRIANGLE_STRIP, 4*(4-1)*2+4-1, GL_UNSIGNED_INT, 0); // HM_SIZE_X*(HM_SIZE_Y-1)*2+HM_SIZE_Y-1

        glDisableVertexAttribArray(0);
        glDisable(GL_PRIMITIVE_RESTART);

    };

protected:
    Map* gameMap;
    Camera* camera;

    GLuint hmVAO;
    GLuint hmVBO;
    GLuint hmVBOindices;

    int* hmIndices;

};

#endif // DEPENDENTIA_MAPRENDERER_HPP

13
Warsztat Summer of Code 2014 / Odp: Dependentia
« dnia: Sierpień 03, 2014, 11:46:54 »
Myślałem bardziej o zwykłych obliczeniach, bo agentów raczej nie zdążę przygotować. Ale zobaczę, może znajdę coś ciekawego; dzięki.

14
Warsztat Summer of Code 2014 / Odp: Warsztat Summer of Code 2014
« dnia: Sierpień 01, 2014, 20:05:34 »

15
Warsztat Summer of Code 2014 / Dependentia
« dnia: Sierpień 01, 2014, 20:04:38 »
Dependentia

Od dłuższego czasu chodzi mi po głowie pomysł stworzenia prostego city buildera w stylu SimCity 4. Pomyślałem, że przy okazji będzie to dobra okazja do nauki OpenGLa, którym od jakiegoś czasu się interesuję.

Założenia:
  • OpenGL z minimalistycznym stylem
  • Mapa kafelkowa z uwzględnieniem wysokości
  • Zależności pomiędzy strefami i budynkami użyteczności publicznej znane z SC4 (oczywiście uproszczone)

Na razie mam za sobą jeden dzień pracy, jest prosty menedżer stanów. Zamierzam aktualizować projekt przynajmniej raz na tydzień.

Więcej kontentu po zakodzeniu ;)

Strony: [1] 2 3