Собственный туман (1.7.10)

4,047
63
645
Народ, у меня уж совсем тупой вопрос:
Как мне перетащить в чистый проект все те библиотеки, которые грузятся с форджем?
Решил таки начать с пустого окошка, но если создаю свой проект рядом с МК, то при запуске начинает грузится игра. А если проект создаётся в новой папке, то он не видит стандартных библиотек... Ну, кроме LWJGL, которую я таки скачал )))
Например, банальный Display не виден...
...Хотя, в примере к LWJGL окошко создают как-то без дисплею :\
 
164
1
4
Оно доступно только по ссылке, а ссылка была в описании к первому туториалу)
 
Как отменить рендер ванильного тумана?
 
608
5
15
Тут походу все на туман подсели?)
 
svk2140 написал(а):
Тут походу все на туман подсели?)
на 95% безопаснее. Законом не запрещено. Туманим где хотим:lol:
[merge_posts_bbcode]Добавлено: 14.06.2016 10:59:10[/merge_posts_bbcode]

Просто под мой генератор мира, туман внизу карты идеально бы смотрелся.
 
Liahim написал(а):
Отменять через эвент... Где-то в этой теме даже есть код.
А ты что, получил-таки туман?
[merge_posts_bbcode]Добавлено: 14.06.2016 13:06:03[/merge_posts_bbcode]

Я вот пока треугольнички рисую )))
хмм... нужно тему тщательно посмотреть.
 
1,137
5
3
Там их и рисовать не надо, читаешь кучу примеров, вики, алгоритмы изучаешь и, самое главное, понимаешь всё это.
 
4,047
63
645
Я уже понял, что рисовать не надо...
Но я в процессе... Что бы глубже постичь, так сказать...
Ещё нужно разобраться, как добыть майнкрафтовскую картинку и заменить моей...
И да... Как отправлять в шейдеры параметры настройки тумана...
В общем, пока изучаю.
 
1,137
5
3
Через команды. В шейдере поставить флаг(?) uniform
Пример

in vec4 pos;

uniform vec4 offset;

main(){
gl_Position = pos + offset;
}


UPD:
Ещё есть атрибуты, можно через них загружать.
 
1,137
5
3
Liahim написал(а):
А из майна-то это как посылать?
Через атрибуты - не мой вариант, как я понял, ибо атрибуты должны принадлежать VAO, а его я не гружу...
Эгеин, майн не отличается НИЧЕМ от другой игры с LWJGL'ом. Поэтому отсылать также
 
4,047
63
645
Так! Всем привет, я вернулся )
В общем, немного почитав/посмотрев туторы, пришёл к выводу, что загрузка шейдеров через .json мне не подходит, так как управлять параметрами не получится. Так что придётся шейдерную программу писать самому.
Ну, как самому, её я тоже взял с примера :)

Однако, не очень понятно, каким образом её запускать в майне и как пихать туда майновскую сцену.

Пока что вопроса/проблемы две:
Первое: в нужном ли месте я запускаю программу?
Код:
private ShaderProgram shader = new ShaderProgram();

@SubscribeEvent
@SideOnly(Side.CLIENT)
public void onRenderFogEvent(RenderFogEvent e)
{
    shader.start();
}
По идее, грузить всё это надо как раз на моменте просчёта тумана. При этом, не понятно, когда ж её останавливать.

Второе: чо-та как-то (видимо, я совсем не знаю java), не получается найти сами файлы шейдеров.
Как правильно прописывать путь для BufferedReader?
Сама программа:
Код:
package ru.liahim.mist.shaders;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import javax.vecmath.Vector3f;

import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL20;

public class ShaderProgram {
    
    private static final String VERTEX_FILE = "mist/shaders/V1.txt";
    private static final String FRAGMENT_FILE = "mist/shaders/F1.txt";
    
    private int programID;
    private int vertexShaderID;
    private int fragmentShaderID;

    private int hightID;
    private int colorID;
    
    public ShaderProgram() {
        vertexShaderID = loadShader(VERTEX_FILE, GL20.GL_VERTEX_SHADER);
        fragmentShaderID = loadShader(FRAGMENT_FILE, GL20.GL_FRAGMENT_SHADER);
        programID = GL20.glCreateProgram();
        GL20.glAttachShader(programID, vertexShaderID);
        GL20.glAttachShader(programID, fragmentShaderID);
        GL20.glLinkProgram(programID);
        GL20.glValidateProgram(programID);
        getUniformLocation();
    }
    
    protected void getUniformLocation() {
        hightID = getUniformLocation("hight");
        colorID = getUniformLocation("color");
    }
    
    protected int getUniformLocation(String uniformName) {
        return GL20.glGetUniformLocation(programID, uniformName);
    }
    
    protected void loadFloat(int location, float value) {
        GL20.glUniform1f(location, value);
    }
    
    protected void loadVector(int location, Vector3f vector) {
        GL20.glUniform3f(location, vector.x, vector.y, vector.z);
    }
    
    protected void loadBoolean(int location, boolean value) {
        float toLoad = 0;
        if (value) toLoad = 1;        
        GL20.glUniform1f(location, toLoad);
    }    

    public void start() {
        GL20.glUseProgram(programID);
    }
    
    public void stop() {
        GL20.glUseProgram(0);
    }
    
    public void cleanUp() {
        stop();
        GL20.glDetachShader(programID, vertexShaderID);
        GL20.glDetachShader(programID, fragmentShaderID);
        GL20.glDeleteShader(vertexShaderID);
        GL20.glDeleteShader(fragmentShaderID);
        GL20.glDeleteProgram(programID);
    }
    
    private static int loadShader(String file, int type) {         
        StringBuilder shaderSource = new StringBuilder();
        try {            
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String line;
            while((line = reader.readLine()) != null) {
                shaderSource.append(line).append("\n");
            }
            reader.close();
        } catch(IOException e) {
            e.printStackTrace();
            System.exit(-1);
        }
        int shaderID = GL20.glCreateShader(type);        
        GL20.glShaderSource(shaderID, shaderSource);
        GL20.glCompileShader(shaderID);        
        if(GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
            System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
            System.err.println("Could not compile shader!");
            System.exit(-1);
        }                  
        return shaderID;
    }
}

При запуске пишет следующее:
Код:
java.io.FileNotFoundException: mist\shaders\V1.txt (Системе не удается найти указанный путь)
[merge_posts_bbcode]Добавлено: 17.06.2016 08:29:19[/merge_posts_bbcode]

P.S.
Предположение по загрузке программы :\
Код:
private Minecraft mc = Minecraft.getMinecraft();
private ShaderProgram shader = new ShaderProgram();

@SubscribeEvent
@SideOnly(Side.CLIENT)
public void onRenderFogEvent(RenderFogEvent e)
{
    shader.start();
    this.mc.getFramebuffer().createBindFramebuffer(this.mc.displayWidth, this.mc.displayHeight);
    shader.stop();
}
 
Liahim написал(а):
Так! Всем привет, я вернулся )
В общем, немного почитав/посмотрев туторы, пришёл к выводу, что загрузка шейдеров через .json мне не подходит, так как управлять параметрами не получится. Так что придётся шейдерную программу писать самому.
Ну, как самому, её я тоже взял с примера :)

Однако, не очень понятно, каким образом её запускать в майне и как пихать туда майновскую сцену.

Пока что вопроса/проблемы две:
Первое: в нужном ли месте я запускаю программу?
Код:
private ShaderProgram shader = new ShaderProgram();

@SubscribeEvent
@SideOnly(Side.CLIENT)
public void onRenderFogEvent(RenderFogEvent e)
{
    shader.start();
}
По идее, грузить всё это надо как раз на моменте просчёта тумана. При этом, не понятно, когда ж её останавливать.

Второе: чо-та как-то (видимо, я совсем не знаю java), не получается найти сами файлы шейдеров.
Как правильно прописывать путь для BufferedReader?
Сама программа:
Код:
package ru.liahim.mist.shaders;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import javax.vecmath.Vector3f;

import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL20;

public class ShaderProgram {
    
    private static final String VERTEX_FILE = "mist/shaders/V1.txt";
    private static final String FRAGMENT_FILE = "mist/shaders/F1.txt";
    
    private int programID;
    private int vertexShaderID;
    private int fragmentShaderID;

    private int hightID;
    private int colorID;
    
    public ShaderProgram() {
        vertexShaderID = loadShader(VERTEX_FILE, GL20.GL_VERTEX_SHADER);
        fragmentShaderID = loadShader(FRAGMENT_FILE, GL20.GL_FRAGMENT_SHADER);
        programID = GL20.glCreateProgram();
        GL20.glAttachShader(programID, vertexShaderID);
        GL20.glAttachShader(programID, fragmentShaderID);
        GL20.glLinkProgram(programID);
        GL20.glValidateProgram(programID);
        getUniformLocation();
    }
    
    protected void getUniformLocation() {
        hightID = getUniformLocation("hight");
        colorID = getUniformLocation("color");
    }
    
    protected int getUniformLocation(String uniformName) {
        return GL20.glGetUniformLocation(programID, uniformName);
    }
    
    protected void loadFloat(int location, float value) {
        GL20.glUniform1f(location, value);
    }
    
    protected void loadVector(int location, Vector3f vector) {
        GL20.glUniform3f(location, vector.x, vector.y, vector.z);
    }
    
    protected void loadBoolean(int location, boolean value) {
        float toLoad = 0;
        if (value) toLoad = 1;        
        GL20.glUniform1f(location, toLoad);
    }    

    public void start() {
        GL20.glUseProgram(programID);
    }
    
    public void stop() {
        GL20.glUseProgram(0);
    }
    
    public void cleanUp() {
        stop();
        GL20.glDetachShader(programID, vertexShaderID);
        GL20.glDetachShader(programID, fragmentShaderID);
        GL20.glDeleteShader(vertexShaderID);
        GL20.glDeleteShader(fragmentShaderID);
        GL20.glDeleteProgram(programID);
    }
    
    private static int loadShader(String file, int type) {         
        StringBuilder shaderSource = new StringBuilder();
        try {            
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String line;
            while((line = reader.readLine()) != null) {
                shaderSource.append(line).append("\n");
            }
            reader.close();
        } catch(IOException e) {
            e.printStackTrace();
            System.exit(-1);
        }
        int shaderID = GL20.glCreateShader(type);        
        GL20.glShaderSource(shaderID, shaderSource);
        GL20.glCompileShader(shaderID);        
        if(GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
            System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
            System.err.println("Could not compile shader!");
            System.exit(-1);
        }                  
        return shaderID;
    }
}

При запуске пишет следующее:
Код:
java.io.FileNotFoundException: mist\shaders\V1.txt (Системе не удается найти указанный путь)
[merge_posts_bbcode]Добавлено: 17.06.2016 08:29:19[/merge_posts_bbcode]

P.S.
Предположение по загрузке программы :\
Код:
private Minecraft mc = Minecraft.getMinecraft();
private ShaderProgram shader = new ShaderProgram();

@SubscribeEvent
@SideOnly(Side.CLIENT)
public void onRenderFogEvent(RenderFogEvent e)
{
    shader.start();
    this.mc.getFramebuffer().createBindFramebuffer(this.mc.displayWidth, this.mc.displayHeight);
    shader.stop();
}
моя проблема решилась сама собой:lol: . Тихо стырил и пошел, называется нашел:angel:
 
1,137
5
3
Вообще не так, конь тебе все написал. Надо обработать экран(фбо), добавив туман.
 
Сверху