0 / 0 / 0
Регистрация: 13.04.2017
Сообщений: 27
1

Вызов метода из класса в main

22.03.2020, 22:36. Показов 1176. Ответов 2
Метки нет (Все метки)

Здравствуйте, никак не могу придумать, как из класса вызвать функцию, передав ей значения лежащие в main().

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#define _USE_MATH_DEFINES
#include <cmath>
#include <limits>
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include "geometry.h"
#include "Light.h"
#include "Material.h"
#include "Sphere.h"
#include "Initialize.h"
 
class Rendering : public Initialize {    //В Initialize у меня функция cast_ray
public:
    void render(std::vector<Sphere>& spheres, std::vector<Light>& lights) {
        const int   width = 1920;
        const int   height = 1080;
        const float fov = M_PI / 3.;
        std::vector<Vec3f> framebuffer(width * height);
 
 
        for (size_t j = 0; j < height; j++) {
            for (size_t i = 0; i < width; i++) {
                float dir_x = (i + 0.5) - width / 2.;
                float dir_y = -(j + 0.5) + height / 2.;
                float dir_z = -height / (2. * tan(fov / 2.));
                framebuffer[i + j * width] = cast_ray(Vec3f(0, 0, 0), Vec3f(dir_x, dir_y, dir_z).normalize(), spheres, lights);
            }
        }
 
        std::ofstream ofs;
        ofs.open("./result.ppm", std::ios::binary);
        ofs << "P6\n" << width << " " << height << "\n255\n";
        for (size_t i = 0; i < height * width; ++i) {
            Vec3f& c = framebuffer[i];
            float max = std::max(c[0], std::max(c[1], c[2]));
            if (max > 1) c = c * (1. / max);
            for (size_t j = 0; j < 3; j++) {
                ofs << (char)(255 * std::max(0.f, std::min(1.f, framebuffer[i][j])));
            }
        }
        ofs.close();
        
    }
 
};
 
    int main() {
 
        Material one(Vec3f(0.4, 0.4, 0.3), 50.);
        Material two(Vec3f(0.7, 0.1, 0.2), 15.);
 
        std::vector<Sphere> spheres;
        spheres.push_back(Sphere(Vec3f(-5, 0, -19), 2, one));
        spheres.push_back(Sphere(Vec3f(7, 5, -15), 3, two));
 
        std::vector<Light>  lights;
        lights.push_back(Light(Vec3f(0, 20, 20), 5.5));
 
        
        render (spheres, lights); //Это функцию естественно не видно.
        return 0;
    }
Как можно её вызвать ?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2020, 22:36
Ответы с готовыми решениями:

Вызов метода класса из main
Как вызвать функцию plus в меин? пробовал вариант р3.=р3.plus(p1,p2), но не получилось #include...

Вызов метода из vector(a) в функции main без использования вызова execute внутри класса
Добрый день столкнулся с проблемой, что просто не могу вызвать метод из вектора в функции main. Код...

Вызов метода класса из метода другого класса
Помогите школнегу Имеется несколько классов class Com { protected: unsigned char bufrd,...

Вызов метода производного класса через обращение к методу базового класса
Добрый день. Изучаю основы ООП, наткнулся на проблему. Если создавать классы внутри main.cpp,...

2
194 / 151 / 44
Регистрация: 11.11.2019
Сообщений: 345
22.03.2020, 23:11 2
Лучший ответ Сообщение было отмечено ElectronicZ как решение

Решение

Нужно создать экземпляр Rendering
C++
1
Rendering rendering; // тут возможны параметры, в зависимости от наличия конструкторов
затем вызвать метод:
C++
1
rendering.render(spheres, lights);
1
0 / 0 / 0
Регистрация: 13.04.2017
Сообщений: 27
23.03.2020, 10:50  [ТС] 3
Всё гениальное - просто, спасибо вам .
P.S То есть вы создаём объект rendering типа Rendering и уже для объекта применяем наш метод, так ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.03.2020, 10:50
Помогаю со студенческими работами здесь

Вызов динамического метода класса по указателю на объект класса
Как это можно сделать? И хотелось бы как можно проще.

Вызов метода внутреннего класса методом внешнего класса
Не могу разобраться как реализовать вложенный класс и как его вызвать. Занимаюсь по Лафоре, про...

Вызов метода класса без создания экземпляра класса.
В общем мне для функционирования одной программы нужно постоянно вызывать метод одного из классов....

Вызов методов класса в функцию main()
#include &lt;iostream&gt; using namespace std; class Person { public: char name; int age; void...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru